A compilação do Docker fornece “incapaz de preparar o contexto: o contexto deve ser um diretório: / Users / tempUser / git / docker / Dockerfile”

99

Eu tenho um Dockerfileque deve construir uma Ubuntuimagem. Mas sempre que eu corro

docker build -t ubuntu-test:latest ./Dockerfile

Mostra o seguinte erro no console

incapaz de preparar o contexto: o contexto deve ser um diretório: / Users / tempUser / git / docker / Dockerfile

Estou no Mac OsX. Eu tentei sudotambém. Nada funciona.

Damien-Amen
fonte

Respostas:

149

Você precisa apontar para o diretório . Você não deve especificar o dockerfile.

docker build -t ubuntu-test:latest .faz o trabalho .

docker build -t ubuntu-test:latest ./Dockerfilese não funcionar .

Damien-Amen
fonte
Por que é assim? parece estranho precisar apontar para um diretório quando você poderia facilmente fazer com que ele
apontasse
75

Você também pode executar o docker build com a -fopção

docker build -t ubuntu-test:latest -f Dockerfile.custom .

JakubKnejzlik
fonte
1
Isso funcionou para mim. O nome do Dockerfile no meu caso era Dockerfile-abcd, então tive que disparar:docker build -t my-custom-name -f /path_to_my_docker_file/Dockerfile-abcd .
niranjan harpale
17

Para especificar um Dockerfilequando construir, você pode usar:

docker build -t ubuntu-test:latest - < /path/to/your/Dockerfile

Mas ele vai falhar se há ADDou COPYcomando que depende caminho relativo. Existem muitas maneiras de especificar um contextfor docker build, você pode consultar os documentos do docker build para obter mais informações.

shizhz
fonte
Fiz isso para o Ubuntu 12.04 : docker build -t ubuntu:12.04 - < DockerfileVocê deve estar na raiz do Dockerfile
Dominic Motuka
16

Entenda os contextos

O docker buildcomando

A sintaxe básica do comando de construção do docker é

docker build -t imagename:imagetag context_dir

O contexto

O contexto é um diretório e determina o que o processo de compilação do docker verá: Do ponto de vista do Dockerfile, qualquer arquivo context_dir/mydir/myfileem seu sistema de arquivos se tornará /mydir/myfileno Dockerfile e, portanto, durante o processo de compilação.

O dockerfile

Se o dockerfile for chamado Dockerfilee residir no contexto, ele será encontrado implicitamente pela convenção de nomenclatura. Isso é bom, porque significa que geralmente você pode encontrar o Dockerfile em qualquer contêiner do docker imediatamente.

Se você insiste em usar um nome diferente, diga "/ tmp / mydockerfile", você pode usar -fassim:

docker build -t imagename:imagetag -f /tmp/mydockerfile context_dir

mas o dockerfile não estará na mesma pasta ou pelo menos será mais difícil de encontrar.

Lutz Prechelt
fonte
2

É simples, sempre que o build do Docker é executado, o docker quer saber qual é o nome da imagem, então precisamos passar -t:. Agora certifique-se de estar no mesmo diretório onde tem o Dockerfile e execute

docker build -t <image_name>:<version> . Exemplo, docker build -t my_apache:latest .supondo que você esteja no mesmo diretório que seu Dockerfile, caso contrário, passe a sinalização -f e o Dockerfile.

docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile

Prasanthe
fonte
Para que o segundo comando fosse executado, tive que alterá-lo ligeiramente: docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile(observe a adição de um .no final)
Josh
2

Eu enfrento o mesmo problema. Estou usando docker version:17.09.0-ce.

Eu sigo os passos abaixo:

  1. Criar Dockerfile e adicionar comandos para criar imagens docker
  2. Vá para o diretório onde criamos o Dockfile
  3. execute o comando abaixo $ sudo docker build -t ubuntu-test:latest .

Resolveu o problema e a imagem foi criada com sucesso.

Nota: o comando de construção depende da versão do docker, bem como da opção de construção que estamos usando. :)

Rajeev Rathor
fonte
1

Um dos motivos pelos quais recebi um erro foi o nome do arquivo, certifique-se de que o nome do arquivo seja Dockerfile. Então eu descobri, espero que possa ajudar alguém.

Dheeraj Kumar
fonte