无法建立特定的Dockerfile


88

我能够构建一个像

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

15
因此,您的问题是,如果Dockerfile的名称不是Dockerfile,我该如何构建Dockerfile?
肯·科克伦

1
@KenCochrane是的。这就是问题
迪帕克

1
如果运行docker build --help,则在一行中可以找到您要查找的内容:-f,
file

2
您在2013年学习Docker。这是有远见的。
mcan

Answers:


210

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

docker build -f MyDockerfile。

或带有标签:

docker build -t mysuperimage -f MyDockerfile。


1
docker build -f Dockerfile.consumer给我一个错误“ docker build”需要精确的1个参数。请参阅'docker build --help'。用法:docker构建[OPTIONS] PATH | 网址| -
卡迈勒

12
@kamal您是否.在上述命令的结尾处注意到一个点()?
Sateesh Pagolu,

7
只是说-要求添加。只是很
烦人

2
.不是必需的。生成命令采用两个参数。目录的路径Dockerfile和路径context。所以,我们可以做docker build -t mysupertag -f ./foo/Dockerfile ./foo
Mohnish


22

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/


1
我试过一个URL,它的工作原理。路径也应该根据文档工作。将提交一个错误。
迪帕克

5
根据您共享的文档(谢谢)。docker build - < Dockerfile不允许我添加本地文件。但是尝试了一下,它就起作用了
迪帕克(Deepak)2013年

2
但我想给一个不同的Dockerfile,仍然有一个上下文,即。添加文件。所以我会提出一个错误
迪帕克(Deepak)

这只会创建一个包含单个Dockerfile的上下文。所有支持文件都不会进入上下文。
itsafire 2014年

12

尝试dockerfeed。它使用docker功能通过stdin构建上下文。我编写脚本的目的是确切地解决您遇到的我自己的问题。

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

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

还有。Dockerfeed与相同docker build。它使用Dockerfile打包了源代码,但允许您将旧的Dockerfile替换为所需的Dockerfile。在此过程中不会创建任何文件,也不会更改源。生成的tar存档将通过管道传递到docker,而后者又将其发送到docker守护程序。

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

docker build -f other-Dockerfile .

5

您也可以使用docker-compose实现此目的。

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

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

码头工人组成


0

假设您已经成功安装了包括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时,您将为网络构建映像。


0

我的情况是在/tmp目录中,虽然我通过了-f <Dockerfile.foo>

最干净,最简单(对我而言)的解决方案是(将dockerfeed上述答案整合):

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.