如何从两个现有容器创建 docker image/container

how to create a docker image/container from two existing containers

在 AWS ECR 中,我有 2 个图像,我希望创建一个图像,该图像是结合这两个图像的内容的结果。我有以下 Dockerfile 来执行此操作:

FROM *insert image uri of image #1* as a

COPY --from=a . /a

FROM *insert image uri of image #2* as b

COPY --from=b . /b

当我尝试 运行 docker build . -t final-image:latest --file . 时,我得到 Error response from daemon: unexpected error reading Dockerfile: read /var/lib/docker/tmp/docker-builder590433020: is a directory。谁知道构建此图像的正确方法是什么?

您正在传递一个目录来代替文件参数。

因为你使用了点,这是当前目录,你可以省略文件参数,假设你的 Dockerfile 被称为 Dockerfile 并且存在于上下文目录中。否则,将其指向实际文件。

在任何情况下,使用点作为(最后一个)位置参数来提供上下文目录。

运行 之一:

docker build --tag myimge .
docker build --tag myimage --file /path/to/Dockerfile .

之后,您的 Dockerfile 就没有多大意义了。如果要从已有的2张图片中复制,可以直接引用。

例如:

FROM busybox

COPY --from=docker.io/ubuntu /foo /a
COPY --from=docker.io/debian /bar /b

另一个问题是你COPY来自你目前所处的同一阶段两次:

FROM foo as a
# here you say copy from a but you are currently in a
# so that doesnt make sense
COPY --from=a . /a

如果要从上一阶段复制,需要命名上一阶段,而不是当前阶段:

FROM foo as a
RUN /touch /myfile
FROM bar as b
COPY --from a /myfile /mycopy

当然,您可以将其链接到更多阶段。