No meu Dockerfile
eu tenho:
ADD ../../myapp.war /opt/tomcat7/webapps/
Esse arquivo existe como ls ../../myapp.war
retorna o arquivo correto, mas quando executo sudo docker build -t myapp .
, tenho:
Step 1 : ADD ../../myapp.war /opt/tomcat7/webapps/
2014/07/02 19:18:09 ../../myapp.war: no such file or directory
Alguém sabe por que e como fazê-lo corretamente?
Respostas:
Você pode criar o Dockerfile a partir do diretório pai:
fonte
-f
não parece ser preterido pelos documentos -> Especifique um Dockerfile (-f) : docs.docker.com/engine/reference/commandline/build/…Infelizmente (por razões práticas e de segurança, eu acho), se você deseja adicionar / copiar conteúdo local, ele deve estar localizado no mesmo caminho raiz que o
Dockerfile
.A partir da documentação :
EDIT: Agora existe uma opção (
-f
) para definir o caminho do seu Dockerfile; pode ser usado para alcançar o que você deseja, veja a resposta do @Boedy abaixo.fonte
Com o docker-compose, você pode definir a pasta de contexto:
fonte
Adicionando alguns trechos de código para dar suporte à resposta aceita.
Estrutura de diretório:
Entrada de arquivo do Docker:
Comando usado para criar a imagem do Docker
fonte
install_x.sh
?A solução para quem usa o compositor é usar um volume apontando para a pasta pai:
Mas tenho certeza de que isso pode ser feito com volumes no Dockerfile .
fonte
Como
-f
causou outro problema, desenvolvi outra solução.O
-f
sinalizador não resolveu meu problema, porque minhaonbuild
imagem procura um arquivo em uma pasta e teve que chamar assim:-f foo/bar/Dockerfile foo/bar
ao invés de
-f foo/bar/Dockerfile .
Observe também que esta é a única solução para alguns casos, como
-f
sinalizadorfonte