基于howto,我基于现有图像创建了一个新图像 现在我没有Dockerfile,当容器启动时会发生一些事情 我无法改变 - 这就是它对我的看法。
有没有办法修改我使用的基本映像的Dockerfile中设置的内容?
例如:容器在启动时运行bash脚本,我想更改它。
答案 0 :(得分:23)
要回答您的特定q:" 容器在启动时运行bash脚本,我想更改此"。假设您要运行/script.sh
(图像的一部分)而不是默认值,您可以使用以下方法实例化容器:
docker run --entrypoint /script.sh repo/image
如果script.sh
不是图片的一部分和/或您不希望每次都使用--entrypoint
明确指定,则可以准备包含并运行您的图片拥有script.sh
:
script.sh
使用以下内容创建Dockerfile
:
FROM repo/image
ADD script.sh /
ENTRYPOINT /script.sh
docker build -t="myimage" .
docker run myimage
注意:
--entrypoint
,因为我们在Dockerfile
中默认了它。答案 1 :(得分:3)
如果使用教程中的命令启动容器失败,则基本映像很可能引入了ENTRYPOINT。您为docker run
指定的任何命令都将作为选项附加到ENTRYPOINT命令。因此,给出例如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,请使用--entrypoint
选项:
docker run --entrypoint "" -d --name newguest -p 8080:80 mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND
答案 2 :(得分:2)
只需在空目录中创建一个新的Dockerfile。使用
启动DockerfileFROM repo/image
其中' repo / image'是您当前使用的图像的ID。
并在下面添加您的自定义。
这样您就可以构建基于另一个图像的新图像。
特别是,要更改启动时运行的命令,请输入CMD和/或ENTRYPOINT行。