У меня есть место, Dockerfile
где я копирую существующий каталог (с содержимым) в контейнер, который отлично работает:
Dockerfile
FROM php:7.0-apache
COPY Frontend/ /var/www/html/aw3somevideo/
COPY Frontend/ /var/www/html/
RUN ls -al /var/www/html
RUN chown -R www-data:www-data /var/www/html
RUN chmod -R 755 /var/www/html
Но когда я использую docker-compose.yml
файл, есть только каталог, aw3somevideo
а внутри aw3somevideo
ничего нет.
docker-compose.yml :
php:
build: php/
volumes:
- ./Frontend/ :/var/www/html/
- ./Frontend/index.php :/var/www/html/
ports:
- 8100:80
Возможно, я не понимаю функции, volumes
и если это так, скажите мне, как скопировать мои существующие файлы в контейнер через docker-compose.yml
файл.
docker
copy
docker-compose
volumes
Доктор
источник
источник
volumes:
раздел из файла docker-compose. У вашего изображения уже есть данные. Раздел volume: просто перезаписывает данные. Также перейдите к текущему формату docker-compose (версия 2).Ответы:
Дано
если
/dir/on/host
не существует, он создается на хосте, а пустой контент монтируется в контейнер по адресу/var/www/html
. Любое содержимое, которое у вас было раньше в/var/www/html
контейнере, будет недоступно, пока вы не отключите том; новое крепление скрывает старое содержимое.источник
var/www/html/
больше не копируется,/dir/on/host
даже если оно не существует? Есть ли способ принудительно скопировать данные из контейнера докеров на хост при первом запуске контейнера?docker run -v /dir/on/host:/hostdir php sh -c "cp -rp /var/www/html/* /hostdir && exec myapp"
. Не забудьте использоватьexec
для вызова последней команды, чтобы ей был присвоен PID1. Это обеспечит получение myapp сигналов завершения (например, Ctrl-C).