dockerfile:如何从基本图像中使用CMD或ENTRYPOINT

Dav*_*e C 10 docker dockerfile docker-build

我有几个不属于我的基础docker图像(所以我不能修改它们).但是,我正在创建新的图像,并安装了其他内容.

我无法弄清楚的是如何告诉dockerfile复制基本图像的CMD(或ENTRYPOINT).像这样的东西:

FROM other:latest
RUN my-extra-install
CMD <use-the-CMD-from-base-image>
Run Code Online (Sandbox Code Playgroud)

我不认为CMD命令有任何直接的语法来做我想要的.我想知道是否有解决方法.

Vor*_*Vor 19

如果您在新的Dockerfile中将其留空,它将继承基础映像中的那个.

例如:

基础

FROM ubuntu
CMD ["echo", "AAA"]
Run Code Online (Sandbox Code Playgroud)

layer1的

FROM base
Run Code Online (Sandbox Code Playgroud)

如果您构建上面的图像并运行,layer1您将获得以下内容:

$ sudo docker run -it layer1
AAA
Run Code Online (Sandbox Code Playgroud)

  • @williamli 如果您省略 ENTRYPOINT,它也会从基本图像中获取 (3认同)
  • @Vor 入口点不同吗?如果我的图像和基础都有一个入口点怎么办? (2认同)

小智 5

@Vor是对的。但万一

# Dockerfile
FROM nginx:stable-alpine
ENTRYPOINT ["/docker-entrypoint.sh"]
COPY ./docker-entrypoint.sh /
Run Code Online (Sandbox Code Playgroud)

# docker-entrypoint.sh
#!/usr/bin/env sh
set -e
exec "$@"
Run Code Online (Sandbox Code Playgroud)

默认的 CMDnginx:stable-alpine不会在exec "$@".

CMD你必须在 Dockerfile 中自己编写默认的 nginx-alpine (!)

# Dockerfile
FROM nginx:stable-alpine
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["nginx", "-g", "daemon off;"]
COPY ./docker-entrypoint.sh /
Run Code Online (Sandbox Code Playgroud)

或者更改你的 docker-entrypoint.sh

# docker-entrypoint.sh
#!/usr/bin/env sh
set -e
exec nginx -g "daemon off;"
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你