如何从两个现有容器创建 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
当然,您可以将其链接到更多阶段。
在 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
当然,您可以将其链接到更多阶段。