我需要扩展一个基础镜像(jwilder/nginx-proxy),因为我需要向该镜像添加一些额外的配置。
这些配置更改中的一些需要在容器的运行时期间完成,在基础映像的逻辑开始之前。
我实现运行时配置的方法是创建一个自定义ENTRYPOINT文件,该文件首先执行所有自定义工作,然后启动基础映像的入口点。
我的入口点看起来像这样:
#!/bin/bash
# my custom logic here
echo "Executed custom logic."
# default jwilder/nginx entrypoint
/app/docker-entrypoint.sh "$@"
字符串
目前,这不起作用,因为“$@”解析为空。我的自定义Dockerfile没有设置自定义CMD,只有ENTRYPOINT。
有没有什么原因导致这不起作用?我希望基本图像的CMD保持设置并传递到我的ENTRYPOINT。否则,我需要复制基础映像的CMD,如果CMD发生更改,则很容易出错。
2条答案
按热度按时间d6kp6zgx1#
从文件上看
如果CMD是从基础映像定义的,则设置ENTRYPOINT会将CMD重置为空值。在这种情况下,必须在当前映像中定义CMD才能有值。
CMD也是如此。CMD和ENTRYPOINT将重置基础图像中的任何CMD或ENTRYPOINT值。
你得自己重新设置。
如果你担心这个值会改变--而基础图像是在你的控制之下--你可以设置一个环境变量并使用它。
yc0p9oo02#
假设从基地的
CMD
将被删除,如在建设者参考。CMD
可以与新的ENTRYPOINT
沿着包含在Dockerfile
中。https://hub.docker.com/layers/jwilder/nginx-proxy/latest/images/sha256-876a1df7bf88bb801cef813b276e4ee8c1861fca4c47cfaaeb2e7d3a087c4360?context=explore表示
CMD
将是CMD ["forego" "start" "-r"]
。Dockerfile示例:
字符串
应产生:
的数据
此外,根据https://docs.docker.com/engine/reference/commandline/run/,我们可以使用
--entrypoint
和docker run
命令来覆盖Dockerfile中的默认ENTRYPOINT
,然后在docker run
命令的末尾提供CMD
。示例:Dockerfile
型
应产生:
型