首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >平无争议码头形象不起作用

平无争议码头形象不起作用
EN

Stack Overflow用户
提问于 2022-04-26 18:03:47
回答 1查看 363关注 0票数 0

我创建了以下Dockerfile:

代码语言:javascript
复制
FROM ubuntu:20.04 as install

RUN apt update && \
    apt -y install iputils-ping

FROM gcr.io/distroless/base-debian11

COPY --from=install /usr/bin/ping ./ping
COPY --from=install /lib/x86_64-linux-gnu/libcap.so.2 /lib/x86_64-linux-gnu/libcap.so.2
COPY --from=install /lib/x86_64-linux-gnu/libidn2.so.0 /lib/x86_64-linux-gnu/libidn2.so.0
COPY --from=install /lib/x86_64-linux-gnu/libc.so.6 /lib/x86_64-linux-gnu/libc.so.6
COPY --from=install /lib/x86_64-linux-gnu/libunistring.so.2 /lib/x86_64-linux-gnu/libunistring.so.2
COPY --from=install /usr/lib/x86_64-linux-gnu/libgcrypt.so.20 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20
COPY --from=install /usr/lib/x86_64-linux-gnu/libgpg-error.so.0 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0

ENTRYPOINT ["./ping"]

但我不明白为什么不起作用。我想也许容器在过程结束之前就停止了。

代码语言:javascript
复制
$ docker run --rm distroless-ping 127.0.0.1
$ # no output from the run

至少,如果我在没有参数的情况下运行它,就会得到输出:

代码语言:javascript
复制
$ docker run --rm distroless-ping
./ping: usage error: Destination address required

这里有什么问题?我尝试过使用Docker的CMD而不是ENTRYPOINT,但我也遇到了同样的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-26 18:34:38

我不知道gcr.io/distroless/base-debian11到底是什么,但它似乎包含了一个不兼容的运行时加载器。如果我们从Ubuntu映像复制动态加载程序..。

代码语言:javascript
复制
COPY --from=install /lib64/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2

...then,它似乎像预期的那样工作:

代码语言:javascript
复制
$ docker run -it --rm pingtest 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.104 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.020 ms
^C
--- 127.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.020/0.062/0.104/0.042 ms

这使得最终的Dockerfile看起来像:

代码语言:javascript
复制
FROM ubuntu:20.04 as install

RUN apt update && \
    apt -y install iputils-ping

FROM gcr.io/distroless/base-debian11

COPY --from=install /usr/bin/ping ./ping
COPY --from=install /lib/x86_64-linux-gnu/libcap.so.2 /lib/x86_64-linux-gnu/libcap.so.2
COPY --from=install /lib/x86_64-linux-gnu/libidn2.so.0 /lib/x86_64-linux-gnu/libidn2.so.0
COPY --from=install /lib/x86_64-linux-gnu/libc.so.6 /lib/x86_64-linux-gnu/libc.so.6
COPY --from=install /lib/x86_64-linux-gnu/libunistring.so.2 /lib/x86_64-linux-gnu/libunistring.so.2
COPY --from=install /usr/lib/x86_64-linux-gnu/libgcrypt.so.20 /usr/lib/x86_64-linux-gnu/libgcrypt.so.20
COPY --from=install /usr/lib/x86_64-linux-gnu/libgpg-error.so.0 /usr/lib/x86_64-linux-gnu/libgpg-error.so.0
COPY --from=install /lib64/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2

ENTRYPOINT ["./ping"]

请注意,通过一个额外的库,您可以从scratch而不是gcr.io/distroless/base-debian11构建最终映像

代码语言:javascript
复制
FROM ubuntu:20.04 as install

RUN apt update && \
    apt -y install iputils-ping

FROM scratch

COPY --from=install /usr/bin/ping ./ping
COPY --from=install /lib/x86_64-linux-gnu/libcap.so.2 /lib/x86_64-linux-gnu/libcap.so.2
COPY --from=install /lib/x86_64-linux-gnu/libidn2.so.0 /lib/x86_64-linux-gnu/libidn2.so.0
COPY --from=install /lib/x86_64-linux-gnu/libc.so.6 /lib/x86_64-linux-gnu/libc.so.6
COPY --from=install /lib/x86_64-linux-gnu/libunistring.so.2 /lib/x86_64-linux-gnu/libunistring.so.2
COPY --from=install /lib/x86_64-linux-gnu/libgcrypt.so.20 /lib/x86_64-linux-gnu/libgcrypt.so.20
COPY --from=install /lib/x86_64-linux-gnu/libgpg-error.so.0 /lib/x86_64-linux-gnu/libgpg-error.so.0
COPY --from=install /lib/x86_64-linux-gnu/libresolv.so.2 /lib/x86_64-linux-gnu/libresolv.so.2
COPY --from=install /lib64/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2

ENTRYPOINT ["./ping"]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72018571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档