Изменения тома сборки Dockerfile не отражаются в подключенной локальной папке? (ОС Х/boot2Docker)

Используя docker-compose, у меня есть Dockerfile, который создает среду для приложения Sails JS. В моем Dockerfile я создаю новый проект Sails scaffold, используя sails new . (папка, сопоставленная с моей локальной файловой системой через docker-compose).

Когда я запускаю docker-compose build, все кажется успешным. Я выполняю docker-compose up -d на своей локальной машине. Затем я перехожу к папке, которая на хост-компьютере сопоставляется с моей локальной папкой, в которой на хост-компьютере (vm) я создал новый проект Sails. Я ожидаю увидеть все файлы, созданные на компьютере HOST во время docker-compose build, в моей локальной папке. Папка ПУСТА? Как дела?

Мой основной файл docker-compose:

node:
  restart: "always"
  build: ./cnt/node
  ports:
    - "8080:8080"
  volumes:
    - ./src:/var/www/html
  # DEBUG: conveniently used to keep a container running
  command: /bin/bash -c 'tail -f /dev/null'

ПРИМЕЧАНИЕ. ./src — это моя локальная папка, в которой будет находиться мой исходный код. Это сопоставлено с /var/www/html (webroot) на машине HOST.

Вот последние две строки из Dockerfile, найденного в ./cnt/node и используемого для создания шаблона Sails:

WORKDIR /var/www/html
RUN sails new .
RUN touch test.txt

Все работает успешно, когда я выполняю (без ошибок):

docker-compose build
docker-compose up -d

Закончив, я cd src проверил исходный каталог, в котором я ожидал увидеть шаблон моего приложения Sails, но он ПУСТОЙ. Какого черта?! Ошибок не было? Что мне не хватает?

Это как-то связано с файлом docker-compose и с тем, что образ, который я создаю, создается с помощью build: ./cnt/node, а ПОЗЖЕ я монтирую тома в файле compose? Нужно ли монтировать VOLUMES сначала перед созданием каркаса Sails?

Спасибо!


person skålfyfan    schedule 04.12.2015    source источник
comment
Где находится ваша папка src? Только /Users/... используется совместно между вашим хостом и виртуальной машиной: stackoverflow.com/a/33998695/6309   -  person VonC    schedule 04.12.2015
comment
@VonC да. Зная об ограничении папки / Users, моя папка src находится в подпапке / Users.   -  person skålfyfan    schedule 04.12.2015


Ответы (1)


Тома монтируются только во время выполнения, build специально разработан для воспроизводимости, поэтому во время сборки не допускается ничего внешнего.

Вам нужно будет сгенерировать леса на хосте, используя docker-compose run node ...

person dnephin    schedule 04.12.2015
comment
Правильный ответ! К сожалению, docker-compose run node ... создаст новый слой изображения, и я хочу избежать этого при создании каркаса. Решил мою проблему, создав сценарий запуска (startup-check.sh) и добавив его в параметр команды в docker-compose: command: /bin/bash -c '/startup-check.sh && [your_standard_container_command]' - person skålfyfan; 07.12.2015
comment
docker-compose run node не создает новый слой изображения, но создает новый контейнер. Вы можете использовать docker-compose run --rm node для удаления контейнера сразу после его завершения, если это вас беспокоит. Создание новых контейнеров довольно легкое, поэтому, вероятно, это не должно вызывать беспокойства. Сценарий точки входа (как вы описали) является еще одним распространенным вариантом. - person dnephin; 09.12.2015