【发布时间】:2020-07-26 04:21:14
【问题描述】:
我有一个 docker 镜像,我想在它更新时使用和重用它。我想避免对图像本身进行任何更改,以半自动化提取最新图像并基于它部署容器的过程,而不必跳过额外的环节。
该过程的一部分涉及能够修改位于容器中的 docker-entrypoint.sh 文件
/usr/local/bin/docker-entrypoint.sh
我的逻辑是将它作为绑定挂载点挂载到我可以根据需要编辑的本地文件 - 这样我就不必更新图像并在每次发布对原始图像的更新时提交更改 docker-entrypoint.sh 文件。
我正在使用以下命令运行容器:
docker run -d --name test10-new --mount type=bind,source=/data/docker-entrypoint.sh,target=/usr/local/bin/docker-entrypoint.sh new-test:latest
没有挂载它运行良好,但挂载失败,日志中只有这个:
': No such file or directory
知道可能出了什么问题吗? docker-entrypoint.sh 的本地副本是可执行的。 提前致谢!
【问题讨论】:
-
标准方法是在镜像名称中使用日期/版本标签(如果您使用的是 Kubernetes 或 AWS ECS 等集群环境,则基本上是必需的)或显式
docker pull yourimage:latest。一个 Docker 镜像应该是自包含的,如果你还依赖于在镜像之外拥有它的源代码,那么你就否定了很大一部分好处。 (而且你永远不会“提交”图像。) -
明白,但它不是我的图像 - 我正在重用别人的图像。他们付出了很多努力来简化镜像中上游组件的部署过程。我遇到的问题是我不喜欢他们的默认入口点脚本,所以我想用我自己的脚本替换它,我可能只是在每次用最新的图像替换图像时更新它,然后启动容器并运行 Docker承诺拍摄快照以建立我的容器的基础。
-
你可以创建一个 Dockerfile
FROM任何你想要的镜像,COPY你更新的入口点脚本,并且(如果它改变了)设置一个新的ENTRYPOINT和CMD。 “基础”图像中已经有一个入口点不会改变过程。