Хост-тома не монтируются на «Docker-compose up»

Я использую docker-machine и docker-compose для разработки приложения Django с интерфейсом React. Тома не монтируются в среде Debian, но правильно работают в OSX и Windows, я несколько дней боролся с этой проблемой, я создал облегченную версию своего проекта, которая все еще воспроизводит проблему, которую вы можете найти в https://github.com/firetix/docker_bug. мой докер-compose.yml:

django:
    build: django
    volumes:
        - ./django/:/home/docker/django/

Мой Dockerfile выглядит следующим образом

FROM python:2.7
RUN mkdir -p /home/docker/django/
ADD . /home/docker/django/
WORKDIR /home/docker/django/
CMD ["./command.sh"]

Когда я запускаю сборку docker-compose, все работает правильно. Но когда я запускаю docker-compose, я получаю

[8] System error: exec: "./command.sh": stat ./command.sh: no such file or directory

Я нашел этот вопрос в stackoverflow. a> безуспешно следовал предложенным обходным путям.

Я делаю что-то не так? Почему это работает в OSX и Windows, но не в среде Debian? Есть ли обходной путь, работающий в среде Debian? И в Osx, и в Debian есть папки /Users/ в качестве общей папки, когда я проверяю графический интерфейс VirtualBox.


person Rachidi Mohamed    schedule 21.04.2016    source источник
comment
Я обнаружил, что эти проблемы с github связаны, я думаю, github.com/docker/machine/issues/179< /а>   -  person Rachidi Mohamed    schedule 21.04.2016


Ответы (2)


Это не должно работать для вас на OSX, но только на Debian. Вот почему:

Когда вы добавляете ./command.sh к тому /home/docker/django/django/, образ строится нормально, с файлом в правильном каталоге. Но когда вы up контейнер, вы монтируете свой локальный каталог «поверх» того, который вы создали в образе. Так там уже ничего нет...

Я рекомендую добавить command.sh в другое место, например, /opt/django/ или что-то в этом роде, и изменить команду docker на ./opt/command.sh.

Или проще, как-то так, вот полный код:

# Dockerfile
FROM python:2.7
RUN mkdir -p /home/docker/django/
WORKDIR /home/docker/django/

# docker-compose.yml
django:
    build: django
    command: ./command.sh
    volumes:
        - ./django/:/home/docker/django/
person Brandon Stiles    schedule 21.04.2016
comment
Не уверен, что это правда, я только что протестировал его на OSX el capitain Docker v 1.9.0, docker-compose 1.5.0, и он работает, потому что монтирование «поверх» должно переопределять локальные файлы command.sh, а не монтировать пустой объем. В OSX он переопределяет файл, но в Debian я все еще получаю сообщение об ошибке command.sh not found. Я также попытался переместить command.sh в папку, которая не монтируется /opt/, но все равно возникла та же проблема. @Brandon, спасибо за ответ! - person Rachidi Mohamed; 21.04.2016
comment
Насколько я знаю, тома прямого хоста должны быть записаны в абсолютном стиле (для этого можно использовать переменные ${PWD} env. - person BlackStork; 16.02.2017

Я считаю, что это должно сработать. были некоторые проблемы с версиями docker-compose, использующими относительные пути.

 django:
   build: django
   volumes:
     - ${PWD}/django:/home/docker/django
person BlackStork    schedule 15.02.2017