docker - 扩展本地 Dockerfile

我正在尝试将 Dockerfile 基于另一个本地文件。

$ ls -lR
total 0
-rw-r--r--  1 me     me      42 14 avr 10:42 Dockerfile
drwxr-xr-x  3 me     me      42 14 avr 10:42 prod

./prod:
total 0
-rw-r--r--  1 me     me      42 14 avr 10:42 Dockerfile

$ cat prod/Dockerfile
FROM ../Dockerfile
...

$ docker build - < prod/Dockerfile

unable to process Dockerfile: unable to parse repository info: repository name component must match "a-z0-9(?:[._]a-z0-9)*"

我知道 FROM 需要图像而不是路径。

如何从 prod/Dockerfile 扩展 Dockerfile

最佳答案

Dockerfiles 不扩展 DockerfilesimagesFROM 行不是“包含”语句。

因此,如果您想“扩展”另一个 Dockerfile,则需要将原始 Dockerfile 构建为镜像,并扩展该镜像。

例如;

Dockerfile1:

FROM alpine
RUN echo "foo" > /bar

Dockerfile2:

FROM myimage
RUN echo "bar" > /baz

构建第一个 Dockerfile(因为它被称为 Dockerfile1,使用 -f 选项作为 docker 默认查找名为 Dockerfile 的文件) ,并将其“标记”为 myimage

docker build -f Dockerfile1 -t myimage .

# Sending build context to Docker daemon 3.072 kB
# Step 1 : FROM alpine
#  ---> d7a513a663c1
# Step 2 : RUN echo "foo" > /bar
#  ---> Running in d3a3e5a18594
#  ---> a42129418da3
# Removing intermediate container d3a3e5a18594
# Successfully built a42129418da3

然后构建第二个 Dockerfile,它扩展了您刚刚构建的镜像。我们将生成的图像标记为“myextendedimage”;

docker build -f Dockerfile2 -t myextendedimage .

# Sending build context to Docker daemon 3.072 kB
# Step 1 : FROM myimage
#  ---> a42129418da3
# Step 2 : RUN echo "bar" > /baz
#  ---> Running in 609ae35fe135
#  ---> 4ea44560d4b7
# Removing intermediate container 609ae35fe135
# Successfully built 4ea44560d4b7

要检查结果,请从镜像运行容器并验证两个文件(/bar/baz)是否都在镜像中;

docker run -it --rm myextendedimage sh -c "ls -la ba*"

# -rw-r--r--    1 root     root             4 Apr 14 10:18 bar
# -rw-r--r--    1 root     root             4 Apr 14 10:19 baz

我建议阅读 User guide ,它解释了如何使用图像和容器

https://stackoverflow.com/questions/36617904/

相关文章:

docker - Kubernetes多节点上的Kafka

docker - 如何将文件作为 docker 命令的参数发送?

macos - docker 的 `net=host` 设置如何工作,我该如何做类似的事情,例如虚拟

ruby-on-rails - 无法运行 rake db :create in Dockerfile

docker - 拉取访问被拒绝的存储库不存在或可能需要 docker login

docker - 什么是容器 list ?

docker - 如何将 Docker 容器中的目录挂载到主机?

postgresql - Docker 错误 : standard_init_linux. go:1

docker - 如何理解 "/bin/true"命令在 "docker run ..."命令中的作

docker - 停止的 Docker 容器的资源使用情况