docker-compose "Нет такого файла или каталога" для sh-команды - PullRequest
0 голосов
/ 30 июня 2018

Я настраиваю docker-for-windows на своем персональном компьютере.

Когда я недавно установил его на своем офисном ноутбуке, у меня возникла та же проблема, но она просто перестала происходить.

Так что я застрял с этим:

У меня есть работающий в докере проект (на моем другом компьютере) с docker-compose.yml, подобным этому:

version: '2'

services:
  web:
    depends_on:
      - db
    build: .
    env_file: ./docker-compose.env
    command: bash ./run_web_local.sh
    volumes:
      - .:/srv/project
    ports:
      - 8001:8001
    links:
      - db
      - rabbit
    restart: always

Dockerfile:

### STAGE 1: Build ###

# We label our stage as 'builder'
FROM node:8-alpine as builder

RUN npm set progress=false && npm config set depth 0 && npm cache clean --force

# build backend
ADD package.json /tmp/package.json
ADD package-lock.json /tmp/package-lock.json
RUN cd /tmp && npm install
RUN mkdir -p /backend-app && cp -a /tmp/node_modules /backend-app

### STAGE 2: Setup ###
FROM python:3

# Install Python dependencies
COPY requirements.txt /tmp/requirements.txt
RUN pip3 install -U pip
RUN pip3 install --no-cache-dir -r /tmp/requirements.txt

# Set env variables used in this Dockerfile (add a unique prefix, such as DOCKYARD)
# Local directory with project source
ENV PROJECT_SRC=.
# Directory in container for all project files
ENV PROJECT_SRVHOME=/srv
# Directory in container for project source files
ENV PROJECT_SRVPROJ=/srv/project

# Create application subdirectories
WORKDIR $PROJECT_SRVPROJ
RUN mkdir media static staticfiles logs

# make folders available for other containers
VOLUME ["$PROJECT_SRVHOME/media/", "$PROJECT_SRVHOME/logs/"]

# Copy application source code to SRCDIR
COPY $PROJECT_SRC $PROJECT_SRVPROJ

COPY --from=builder /backend-app/node_modules $PROJECT_SRVPROJ/node_modules

# Copy entrypoint script into the image
WORKDIR $PROJECT_SRVPROJ

# EXPOSE port 8000 to allow communication to/from server
EXPOSE 8000

CMD ["./run_web.sh"]

докер-compose.env:

C_FORCE_ROOT=True
DJANGO_CELERY_BROKER_URL=amqp://admin:mypass@rabbit:5672//
DJANGO_DATABASE_ENGINE=django.db.backends.mysql
DJANGO_DATABASE_NAME=project-db
DJANGO_DATABASE_USER=project-user
DJANGO_DATABASE_PASSWORD=mypassword
DJANGO_DATABASE_HOST=db
DJANGO_ALLOWED_HOSTS=127.0.0.1,localhost
DJANGO_DEBUG=True
DJANGO_USE_DEBUG_TOOLBAR=off
DJANGO_TEST_RUN=off
PYTHONUNBUFFERED=0

run_web_local.sh:

#!/bin/bash
echo django shell commands
python ./manage.py migrate
echo Starting django server on 127.0.0.1:8000
python ./manage.py runserver 127.0.0.1:8000

Когда я звоню docker-compose up web, я получаю следующую ошибку:

web_1 | bash: ./run_web_local.sh: такого файла или каталога нет

  • Я проверил окончания строк, они UNIX
  • файл существует как в файловой системе, так и внутри контейнера
  • Я могу позвонить bash run_web_local.sh с моего Windows PowerShell и внутри контейнера
  • Я изменил разрешения UNIX внутри контейнера
  • Я пропустил bash в command в команде docker-compose. И пробовал с обратной косой чертой, без точки и т. Д.
  • я переустановил докер
  • Я пытался перейти на версию 3
  • Docker утверждает, что имеет подключение к моему общему диску C

И: Точно такая же настройка работает на моем другом ноутбуке.

Есть идеи? Все два миллиона сообщений на github не решили проблему для меня.

Спасибо!

Обновление

Удаление volumes: из docker-compose заставляет его работать , как указано здесь , но у меня нет мгновенного отображения. Это очень важно для меня ...

Ответы [ 3 ]

0 голосов
/ 30 июня 2018

Если возможно, пожалуйста, предоставьте все файлы, связанные с этим, чтобы я мог попытаться воспроизвести проблему.

Похоже, что команда не выполняется - это каталог, в котором существует run_web_local.sh.

Вы можете проверить текущий рабочий каталог, заменив команду в docker-compose.yml как command: pwd && bash ./run_web_local.sh

0 голосов
/ 28 мая 2019

У меня недавно возникла та же проблема, и проблема исчезает при использовании любого расширенного редактора и смене конца строки на стиль unix в сценариях входа sh.

В моем случае, не знаю почему, потому что git справляется с этим очень хорошо, в зависимости от Linux или хоста Windows, я оказался в такой же ситуации. Если у вас есть файлы, смонтированные в контейнере и хосте (в Windows) это зависит от того, как вы их редактируете, может быть изменено на linux изнутри контейнера, но это влияет на внешний хост Windows. После этого git указанный файл .sh изменился, но без добавления ни удаления. графический инструмент сравнения показал, что изменилась только новая строка.

Еще один обходной путь к устранению неполадок: например, вы можете запустить скрипт переопределенной точки входа контейнера с помощью sh, а затем оттуда вы можете проверить запущенный контейнер, как linux видит скрипт точки входа, даже вы можете проверить его и увидеть точно такую ​​же ошибку

Извините за мой английский, а не за мой родной язык. Надеюсь, это кому-нибудь поможет.

0 голосов
/ 30 июня 2018

Это может быть из-за того, что файл bash не находится в корневом пути или в корневом пути рабочего каталога. Проверьте, где он находится в контейнере и убедитесь, что путь правильный.

...