Dans ma Dockerfile
j'ai:
ADD ../../myapp.war /opt/Tomcat7/webapps/
Ce fichier existe en tant que ls ../../myapp.war
me renvoie le fichier correct mais lorsque j'exécute Sudo docker build -t myapp .
,
Step 1 : ADD ../../myapp.war /opt/Tomcat7/webapps/
2014/07/02 19:18:09 ../../myapp.war: no such file or directory
Est-ce que quelqu'un sait pourquoi et comment le faire correctement?
Vous pouvez créer le fichier Dockerfile à partir du répertoire parent:
docker build -t <some tag> -f <dir/dir/Dockerfile> .
Malheureusement, (pour des raisons pratiques et de sécurité, je suppose), si vous souhaitez ajouter/copier du contenu local, il doit se trouver sous le même chemin racine que le Dockerfile
.
De la documentation :
Le chemin <src> doit être dans le contexte de la construction; vous ne peut pas ajouter ../quelque chose/ quelque chose, parce que la première étape d'un docker build consiste à envoyer le répertoire de contexte (et les sous-répertoires) au démon docker.
EDIT: Il existe maintenant une option (-f
) pour définir le chemin de votre fichier Docker; il peut être utilisé pour obtenir ce que vous voulez, voir la réponse de @Boedy maintenant.
Avec docker-compos, vous pouvez définir un dossier de contexte:
#docker-compose.yml
version: '3.3'
services:
yourservice:
build:
context: ./
dockerfile: ./docker/yourservice/Dockerfile
La solution pour ceux qui utilisent composer consiste à utiliser un volume pointant vers le dossier parent:
#docker-composer.yml
foo:
build: foo
volumes:
- ./:/src/:ro
Mais je suis sûr que vous pouvez jouer avec volumes dans Dockerfile .
Puisque -f
a causé un autre problème, j'ai développé une autre solution.
Le drapeau -f
ne résout pas mon problème car mon image onbuild
recherche un fichier dans un dossier et doit appeler comme ceci:
-f foo/bar/Dockerfile foo/bar
au lieu de
-f foo/bar/Dockerfile .
Notez également qu'il ne s'agit que d'une solution dans certains cas, comme indicateur -f
.
Ajout de fragments de code pour prendre en charge la réponse acceptée.
Structure du répertoire:
setup/
|__docker/DockerFile
|__target/scripts/<myscripts.sh>
src/
|__<my source files>
Entrée du fichier Docker:
RUN mkdir -p /home/vagrant/dockerws/chatServerInstaller/scripts/
RUN mkdir -p /home/vagrant/dockerws/chatServerInstaller/src/
WORKDIR /home/vagrant/dockerws/chatServerInstaller
#Copy all the required files from Host's file system to the container file system.
COPY setup/target/scripts/install_x.sh scripts/
COPY setup/target/scripts/install_y.sh scripts/
COPY src/ src/
Commande utilisée pour construire l'image du menu fixe
docker build -t test:latest -f setup/docker/Dockerfile .