如何修改从现有创build的docker图像

基于一个howto,我创build了一个基于现有的新形象。
现在我没有Dockerfile,并且在容器启动时发生了一些事情
我无法改变 – 这是对我来说。

有没有办法修改已经在我已经使用的基础镜像的Dockerfile中设置的东西?

例如:容器在启动时运行一个bash脚本,我想改变它。

要回答你的具体问题:“ 容器启动时运行一个bash脚本,我想改变这个 ”。 假设你想运行/script.sh (图像的一部分)而不是默认的,你可以使用下面的方法实例化一个容器:

 docker run --entrypoint /script.sh repo/image 

如果script.sh不是图像的一部分,或者您不希望每次都使用--entrypoint来显式指定它,则可以准备一个包含并运行自己的script.sh的图像:

  1. 创build一个空目录并在其中复制或创buildscript.sh
  2. 使用以下内容创buildDockerfile

     FROM repo/image ADD script.sh / ENTRYPOINT /script.sh 
  3. docker build -t="myimage" .

  4. 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行。