Eu tenho um Dockerfile
onde copio um diretório existente (com conteúdo) para o contêiner que funciona bem:
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
Mas quando eu uso um docker-compose.yml
arquivo só existe o diretório aw3somevideo
e dentro aw3somevideo
não há nada.
docker-compose.yml :
php:
build: php/
volumes:
- ./Frontend/ :/var/www/html/
- ./Frontend/index.php :/var/www/html/
ports:
- 8100:80
Talvez eu não entenda a função do volumes
e, se for o caso, diga-me como copiar meus arquivos existentes para o contêiner por meio de um docker-compose.yml
arquivo.
docker
copy
docker-compose
volumes
O médico
fonte
fonte
volumes:
seção do arquivo docker-compose. Sua imagem já contém os dados. A seção volumes: apenas substitui os dados. Mude também para o formato docker-compose atual (versão 2).Respostas:
Dado
se
/dir/on/host
não existir, ele é criado no host e o conteúdo vazio é montado no contêiner em/var/www/html
. Qualquer conteúdo que você tinha antes/var/www/html
dentro do contêiner fica inacessível, até que você desmonte o volume; a nova montagem está escondendo o conteúdo antigo.fonte
var/www/html/
não seja mais copiado,/dir/on/host
mesmo quando não existe? Existe uma maneira de forçar a cópia dos dados de dentro do docker-container para o host ao iniciar um container pela primeira vez?docker run -v /dir/on/host:/hostdir php sh -c "cp -rp /var/www/html/* /hostdir && exec myapp"
. Não se esqueça de usarexec
para invocar o comando final para que seja atribuído PID1. Isso garantirá que myapp receba sinais de encerramento (Ctrl-C por exemplo).