Copie el directorio a otro directorio en Docker usando el comando ADD

382

He leído http://docs.docker.com/engine/reference/builder/#add sin embargo, encontré un problema. Quiero copiar el directorio local goa la ventana acoplable/user/local/

Lo intenté:

ADD go /usr/local/

y:

ADD /go/ /usr/local/ 

además:

RUN chmod 0755 /usr/local/go/src/make.bash

Sin embargo, veo el siguiente mensaje de error /usr/local/go/src/make.bash: No such file or directorypero el godirectorio local contiene make.bash.

pengwang
fuente

Respuestas:

704
ADD go /usr/local/

copiará el contenido de su godirectorio local en el /usr/local/directorio de su imagen acoplable.

Para copiar el godirectorio en /usr/local/uso:

ADD go /usr/local/go

o

COPY go /usr/local/go
Thomasleveil
fuente
43
Estoy tratando de usar la versión de fuente múltiple de ADD, por lo que no puedo especificar el nombre del directorio de destino para el destino. ¿Hay alguna manera de hacer lo que el OP pidió en un formato multi-src (es decir, sin crear una ADDcapa para cada directorio de origen)?
Guss
99
Sólo quiero añadir una anotación al margen de esto diciendo que $HOMEo ~o cualquier otra variable de shell no funcionará. Lo digo porque gasté bastante tratando de resolver esto de lo que me gustaría admitir a pesar de que es obvio para la mayoría.
chillido
34
COPY go / usr / local / go no funciona para mí. No copia
Tyguy7
78
Esto es realmente un asunto bastante confuso. ¿Por qué no puede COPYsimplemente comportarse así cp? En cambio, debe haber una policía adicional sobre cómo funciona.
Zelphir Kaltstahl el
14
El archivo .dockerignore puede ocultar un directorio y COPY o ADD no funcionará para los elementos enumerados
Vereb
49

De hecho ADD go /usr/local/agregará el contenido de la gocarpeta y no la carpeta en sí, puede usar la solución Thomasleveil o si eso no funcionó por alguna razón, puede cambiar WORKDIRpara /usr/local/luego agregar su directorio como:

WORKDIR /usr/local/
COPY go go/

o

WORKDIR /usr/local/go
COPY go ./

Pero si desea agregar varias carpetas, será molesto agregarlas así, la única solución por ahora, como lo veo desde mi problema actual, es usar COPY . .y excluir todos los directorios y archivos no deseados .dockerignore, digamos que tengo carpetas y archivos :

- src 
- tmp 
- dist 
- assets 
- go 
- justforfun 
- node_modules 
- scripts 
- .dockerignore 
- Dockerfile 
- headache.lock 
- package.json 

y quiero agregar src assets package.json justforfun goasí:

en Dockerfile:

FROM galaxy:latest

WORKDIR /usr/local/
COPY . .

en el archivo .dockerignore:

node_modules
headache.lock
tmp
dist

O para más diversión (o si te gusta confundir a más personas y hacerlas sufrir también: P) puede ser:

*
!src 
!assets 
!go 
!justforfun 
!scripts 
!package.json 

De esta forma, ignora todo, pero excluye lo que desea copiar o agregar solo de la "lista de ignorados".

Es una respuesta tardía, pero agrega más formas de hacer lo mismo cubriendo incluso más casos.

Al-Mothafar
fuente
12

Puedes usar COPY. Debe especificar el directorio explícitamente. No se creará solo

COPY go /usr/local/go

Referencia: referencia de Docker CP

Amstel D'Almeida
fuente