Docker COPY issue - "nenhum arquivo ou diretório"

No meu Dockerfile, tenho a seguinte instrução ' copiar:

# Copy app codeCOPY /srv/visitor /srv/visitor

Deve ficar sem dizer que no meu sistema host, sob o diretório"/srv / visitor", há de fato meu código-fonte:

[root@V12 visitor]# ls /srv/visitor/Dockerfile  package.json  visitor.js

Agora, quando tento construir uma imagem usando este Dockerfile, ele trava na etapa em que a" cópia " deve acontecer:

Step 10 : COPY /srv/visitor /srv/visitorINFO[0155] srv/visitor: no such file or directory

Diz que não existe tal diretório, mas claramente existe.

Alguma ideia?

Atualização 1:

Tem sido apontado para mim que eu estava enganado, na forma como eu entendi construir contexto. A sugestão foi alterar a declaração "copiar" para isso:

COPY . /srv/visitor

O problema é que eu tive dessa maneira, e o processo de construção parou na próxima etapa:

RUN npm install

Ele disse algo ao longo das linhas de " nenhum pacote.arquivo json encontrado", quando há claramente um.

Atualização 2:

Tentei executá - lo com essa mudança no Dockerfile:

COPY source /srv/visitor/

Ele parou ao tentar executar o npm:

Step 12 : RUN npm install ---> Running in ae5e2a993e11npm ERR! install Couldn't read dependenciesnpm ERR! Linux 3.18.5-1-ARCHnpm ERR! argv "/usr/bin/node" "/usr/sbin/npm" "install"npm ERR! node v0.10.36npm ERR! npm  v2.5.0npm ERR! path /package.jsonnpm ERR! code ENOPACKAGEJSONnpm ERR! errno 34npm ERR! package.json ENOENT, open '/package.json'npm ERR! package.json This is most likely not a problem with npm itself.npm ERR! package.json npm can't find a package.json file in your current directory.npm ERR! Please include the following file with any support request:npm ERR!     /npm-debug.logINFO[0171] The command [/bin/sh -c npm install] returned a non-zero code: 34

Então, a cópia foi executada? Se sim, por que o npm não consegue encontrar o pacote.json?

Para mim, o diretório estava no contexto correto, apenas foi incluído no (oculto) .dockerignore arquivo na raiz do projeto. Isso leva à mensagem de erro:

lstat mydir/myfile.ext: no such file or directory

Para mim, o problema era que eu estava usando docker build - < Dockerfile

Do documentacaoNota: Se você construir usando STDIN (docker build - < somefile), não há contexto de compilação, portanto, a cópia não pode ser usada.

Eu estava enfrentando esse problema e descobri que era capaz de adicionar um contexto à variável de compilação para carregar meu(S) arquivo (s) Dockerfile (s) de outros diretórios. Isso me permitiu alterar minha estrutura de arquivo Docker padrão um pouco mais ao meu gosto. Aqui está um trecho do meu docker-compose.yml:

version: '3'services:  webserver:    build:      context: .      dockerfile: ./server/Dockerfile    ...

Ao adicionar o contexto, consegui definir onde os arquivos devem ser referenciados. Você pode consultar os documentos do Docker aqui: https://docs.docker.com/compose/compose-file/#context

Espero que isso ajude!

Como a resposta de Xavier Lucas [extremamente útil] afirmou, Você não pode usar copiar ou adicionar de um diretório fora do contexto de compilação (a pasta da qual você executa "docker build" deve ser o mesmo diretório que o seu .Dockerfile). Mesmo se você tentar usar um link simbólico, ele não funcionará.

Nota: isso é específico para POSIX (Linux, Unix, Mac, possivelmente subsistema Linux Para Windows). Você pode ser capaz de fazer semelhante no Windows usando JUNCTION.

cd ~/your_docker_project/cp -al /subfolder/src_directory ./echo "COPY src_directory /subfolder/" >> Dockerfile

Perigo: usar isso tornará seu projeto docker específico para o host. Você quase nunca quer fazer isso! Manuseie com cuidado.

Aplicação: aprender, experimentar em um ambiente de desenvolvimento

Isso fez o truque para mim. cp-al copia a estrutura do diretório e faz links rígidos para todos os arquivos. Quando terminar, execute " rm-rf ./ src_directory " para removê-lo.

Para o seguinte erro,

COPY failed: stat

Eu entendi reiniciando o serviço docker.

Isso aconteceu comigo ao tentar executar o arquivo docker de um diretório diferente.

Eu tinha o COPY failed: stat /var/lib/docker/tmp/docker-builder929708051/XXXX: no such file or directory e conseguiu resolver isso especificando o arquivo docker.

Execucao docker build . -f docker/development/Dockerfile passar.

Mas correndo Runningdocker build docker / development` Dockerfile ' causou esse problema.

-f ou --file para especificar o nome e a localização do Dockerfile.

Achei estranho no início, porque quando eu tinha o Dockerfile no diretório raiz dos aplicativos, funcionou bem. Isso ajudará se você quiser gerenciar um pouco melhor os arquivos do Docker do ambiente.

Para quem está interessado,.gitignore também pode causar o problema. No meu caso, fio.lock foi ignorado. E ele jogou erro semelhante.

Para mim, o problema era que o nome do arquivo que eu estava adicionando tinha um espaço à direita. Um renomeá-lo corrigido.

Finalmente resolvi esse problema no meu caso, o Dockerfile que executa copy estava em um nível mais profundo do project.So percebi que o caminho de compilação do host é expresso em relação ao local do arquivo do Dockerfile.

Para quem procura um problema em 2017 - esse pode ser o seu problema /var/lib/docker/tmp/docker-builderXXXXXXX/... no such file or directory · Issue #1922 · docker/for-mac · GitHub. recomenda excluir você .arquivo dockerignore e novo teste. Se isso funcionar, você pode mexer nas Configurações.dockerignore para resolver o problema.