gpt4 book ai didi

在多步构建中复制时 Docker 构建失败

转载 作者:行者123 更新时间:2023-12-04 01:41:50 27 4
gpt4 key购买 nike

使用 COPY --from=reference 时出现错误在我的 Dockerfile 中。我创建了一个最小的例子:

FROM alpine AS build

FROM scratch
COPY --from=build / /

这会导致以下构建输出:
$ docker build .
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM alpine AS build
---> b7b28af77ffe
Step 2/3 : FROM scratch
--->
Step 3/3 : COPY --from=build / /
failed to copy files: failed to copy directory: Error processing tar file(exit status 1): Container ID 165578 cannot be mapped to a host ID

构建在 CI 中运行良好,但在我运行 Ubuntu 18:04 的笔记本电脑上失败。什么可能导致这个问题?

最佳答案

我刚遇到这个问题。我想在多阶段构建中将标准节点镜像的二进制文件复制到我的镜像中。
在本地工作得很好。在 BitBucket 管道中不起作用。
正如@BMitch 提到的,问题是使用 userns .
使用 BitBucket,userns 设置为 100000:65536,这(据我所知)意味着“安全”用户 ID 必须介于 100000 和 165536 之间。
您在源文件中的用户 ID 不在该范围内,但这并不意味着它是用户 ID 165578。不要问我为什么,但用户 ID 实际上比报告的值低 165536,所以 165578 - 100000 - 65536 = 42。
我的解决方案是将源文件的 user:group 所有权更改为 root:root,将它们复制到我的镜像,然后将 user:group 所有权设置回(尽管在我输入此内容时,我还没有这样做有点,因为我不是 100% 有必要)。

ARG NODE_VERSION
FROM node:${NODE_VERSION}-stretch as node

# To get the files copied to the destination image in BitBucket, we need
# to set the files owner to root as BitBucket uses userns of 100000:65536.
RUN \
chown root:root -R /usr/local/bin && \
chown root:root -R /usr/local/lib/node_modules && \
chown root:root -R /opt

FROM .... # my image has a load of other things in it.

# Add node - you could also add --chown=<user>:<group> to the COPY commands if you want
COPY --from=node /usr/local/bin /usr/local/bin
COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
COPY --from=node /opt /opt

关于在多步构建中复制时 Docker 构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57108751/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com