如何修改从现有创build的docker图像
基于一个howto,我创build了一个基于现有的新形象。
现在我没有Dockerfile,并且在容器启动时发生了一些事情
我无法改变 – 这是对我来说。
有没有办法修改已经在我已经使用的基础镜像的Dockerfile中设置的东西?
例如:容器在启动时运行一个bash脚本,我想改变它。
要回答你的具体问题:“ 容器启动时运行一个bash脚本,我想改变这个 ”。 假设你想运行/script.sh
(图像的一部分)而不是默认的,你可以使用下面的方法实例化一个容器:
docker run --entrypoint /script.sh repo/image
如果script.sh
不是图像的一部分,或者您不希望每次都使用--entrypoint
来显式指定它,则可以准备一个包含并运行自己的script.sh
的图像:
- 创build一个空目录并在其中复制或创build
script.sh
-
使用以下内容创build
Dockerfile
:FROM repo/image ADD script.sh / ENTRYPOINT /script.sh
-
docker build -t="myimage" .
-
docker run myimage
笔记:
- 当运行容器(步骤4)时,不再需要指定
--entrypoint
因为我们在Dockerfile
默认了Dockerfile
。 - 这真的很简单, 无需注册docker枢纽或任何这样的事情(虽然这是当然build议及时;-)
如果使用教程中的命令启动容器失败,则基本映像很可能会引入入口点。 您为docker run
指定的任何命令将作为选项附加到ENTRYPOINT命令。 因此,给定例如/usr/bin/somescript
的入口点,
docker run -d --name newguest -p 8080:80 mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND
将导致容器执行
/usr/bin/somescript /usr/sbin/httpd -D FOREGROUND
代替
/usr/sbin/httpd -D FOREGROUND
为了摆脱入口点,使用--entrypoint
选项:
docker run --entrypoint "" -d --name newguest -p 8080:80 mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND
只需在空目录中创build一个新的Dockerfile。 启动Dockerfile
FROM repo/image
其中“repo / image”是您当前使用的图像的ID。
并在下面添加您的自定义。
这样你就可以build立一个基于另一个图像的新图像。
特别是要更改启动时运行的命令,请inputCMD和/或ENTRYPOINT行。