【问题标题】:How do I build a dockerfile if the name of the dockerfile isn't Dockerfile?如果 dockerfile 的名称不是 Dockerfile,我如何构建 dockerfile?
【发布时间】:2021-12-10 10:13:42
【问题描述】:

我可以像这样构建一个 Dockerfile

docker build -t deepak/ruby .

但是对于一个没有命名为Dockerfile的Dockerfile

# DOCKER-VERSION 0.4.8

FROM deepak/ruby

MAINTAINER Deepak Kannan "deepak@example.com"

RUN ./bin/rails s

假设它被称为Dockerfile.app 我们用它构建的

docker build -t deepak/app Dockerfile.app

然后我得到错误

Uploading context 0 bytes
Error build: EOF
EOF

【问题讨论】:

  • 所以你的问题是,如果 dockerfile 的名称不是 Dockerfile,我该如何构建 dockerfile?
  • @KenCochrane 是的。这就是问题
  • 如果你运行docker build --help,有一行你可以找到你要找的东西:-f, --file string Dockerfile的名称(默认是'PATH/Dockerfile')跨度>
  • 你在 2013 年学习 Docker。这是有远见的。

标签: docker


【解决方案1】:

请注意,两个命令的末尾都有一个点 .

docker build -f MyDockerfile .

或者带标签:

docker build -t mysuperimage -f MyDockerfile .

【讨论】:

  • docker build -f Dockerfile.consumer 给我一个错误“docker build”需要恰好 1 个参数。请参阅“docker build --help”。用法:docker build [OPTIONS] PATH |网址 | -
  • @kamal 您是否注意到上述命令末尾有一个点 (.)?
  • 只是说 - 需要添加 .只是很烦人
  • . 不是必需的。构建命令需要两个参数,即。 Dockerfile 的路径和context 目录的路径。所以,我们可以做docker build -t mysupertag -f ./foo/Dockerfile ./foo
【解决方案2】:

这个作品

docker build doronaviguy/helloworld -f SomeDockerFile .

Docker build Documentation

【讨论】:

  • 我需要 -t 添加标签。
【解决方案3】:

docker build 的最后一个参数是构建路径,当您输入. 时,表示这是您将找到Dockerfile 的路径。当您将其更改为 Dockerfile.app 时,它会尝试查找 Dockerfile.app/Dockerfile,这是不正确的。

我不确定它是否仍然有效,但你以前可以这样做。

$ docker build -t deepak/app - < Dockerfile.app

尝试一下,看看它是否有帮助,如果没有,可能会打开一个 docker 问题以重新添加此功能,或者更新有关如何使用具有不同名称的 Dockerfile 的文档。

更多信息在这里:http://docs.docker.io/en/latest/commandline/command/build/

【讨论】:

  • 我尝试了一个网址,它可以工作。路径也应该根据文档工作。将提交一个错误。
  • 根据您分享的文档(谢谢)。 docker build - &lt; Dockerfile 不允许我添加本地文件。但是已经尝试过了,它可以工作
  • 但我想提供一个不同的 Dockerfile 并且仍然有一个上下文,即。添加文件。所以我会提交一个错误
  • 这只会创建一个包含单个 Dockerfile 的上下文。所有支持文件都不会进入上下文。
【解决方案4】:

试试dockerfeed。它使用 docker 功能通过标准输入构建上下文。我编写脚本正是为了解决我自己面临的问题。

要将 Dockerfile 替换为其他文件,您可以这样做:

dockerfeed -d Dockerfile.app . | docker build -t deepak/ruby -

然后瞧。 Dockerfeed 的作用与docker build 相同。它将源代码与 Dockerfile 打包在一起,但允许您将旧的 Dockerfile 替换为所需的文件。在此过程中不创建文件,不更改源。生成的 tar 归档文件通过管道传输到 docker 中,然后由 docker 将其发送到 docker 守护进程。

更新: 在过去没有可用的-f 开关时,这是一个有效的答案。在 docker 版本 1.5 中引入了这个选项。现在您可以像这样构建提供不同的 Dockerfile:

docker build -f other-Dockerfile .

【讨论】:

    【解决方案5】:

    这应该可行,

    docker build -t &lt;tag-name&gt; -f &lt;file-name&gt; .

    【讨论】:

    • 如何在 docker-compose 命令中指定文件路径
    【解决方案6】:

    您也可以使用 docker-compose 来实现这一点。

    在 build 部分下的 docker-compose.yml 中,您可以指定存储 dockerfile 的目录及其备用名称,如下所示:

    build:
      context: "/path/to/docker/directory"
      dockerfile: "dockerfile-alternate-name"
    

    docker-compose

    【讨论】:

      【解决方案7】:

      Windows 用户应尝试以下命令:

      docker build -f absolute_docker_file_path 点

      例如:

      docker build -f D:\Code\core-api\API_TEST.Dockerfile .

      【讨论】:

        【解决方案8】:

        我的案例在/tmp 目录中,有很多文件,docker 尝试使用其他文件虽然我通过了-f &lt;Dockerfile.foo&gt;

        最干净、最简单(对我来说)的解决方案是(而不是上面答案中的dockerfeed):

        cat DockerFile.debian.foo | docker build -t debian.foo -
        

        【讨论】:

          【解决方案9】:

          如果您有多个Dockerfile,就像大型项目中的情况一样,您可以指定要使用的相应的完全限定Dockerfile

          docker build -t swagger_local -f /Users/123456/myrepos/storage/services/gateway/swagger/Dockerfile .
          

          /Users/123456/myrepos/storage 运行的命令在子项目中使用Dockerfile 创建swagger_local 图像(在我的情况下为services/gateway

          【讨论】:

            【解决方案10】:

            假设您已经成功安装了包含 docker-composedocker-machine 的 docker 工具箱。这是我的 docker-compose.yml

            version: '2'
            services: 
              web: ./www/python
              ports:
               - "5000:5000"
            

            这是在 Dockerfile 下

            FROM python:3.4-alpine
            ADD ./www/python /code
            WORKDIR /code
            RUN pip install -r requirements.txt
            CMD ["python", "app.py"]
            

            确保这些文件正好位于根文件夹下。当您运行 docker-compose up 时,您将构建 web 映像。

            【讨论】:

              猜你喜欢
              • 2014-11-22
              • 2017-12-04
              • 2019-10-19
              • 1970-01-01
              • 2021-01-20
              • 1970-01-01
              • 1970-01-01
              • 2016-12-23
              • 1970-01-01
              相关资源
              最近更新 更多