修改从现有docker映像创建的docker映像
通过遵循操作指南,我在现有图像的基础上创建了一个新图像。修改从现有docker映像创建的docker映像,docker,Docker,通过遵循操作指南,我在现有图像的基础上创建了一个新图像。 我没有原始图像的Dockerfile,当容器启动时会发生一些事情 我不能改变——不管怎么说,这就是它的样子 有没有办法修改基本映像Dockerfile中的命令 例如,容器在启动时运行bash脚本,我想对此进行更改。只需在空目录中创建一个新的Dockerfile。使用启动Dockerfile FROM repo/image 其中“repo/image”是您当前使用的映像的id 并在下面添加您的自定义设置 通过这种方式,您可以基于另一个图
我没有原始图像的Dockerfile,当容器启动时会发生一些事情 我不能改变——不管怎么说,这就是它的样子 有没有办法修改基本映像Dockerfile中的命令
例如,容器在启动时运行bash脚本,我想对此进行更改。只需在空目录中创建一个新的Dockerfile。使用启动Dockerfile
FROM repo/image
其中“repo/image”是您当前使用的映像的id
并在下面添加您的自定义设置
通过这种方式,您可以基于另一个图像构建一个新图像
特别是,要更改启动时运行的命令,请输入CMD和/或ENTRYPOINT行。如果使用教程中的命令启动容器失败,则基本映像很可能引入了ENTRYPOINT。为
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
为了回答您的特定问题:“容器在启动时运行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运行myimage
- 运行容器(步骤4)时,不再需要指定
,因为我们在--entrypoint
中默认了它Dockerfile
- 其实很简单;不需要注册docker hub或任何类似的东西(尽管当然及时推荐;-)
xxx/yyy
开始,并进一步对其进行自定义。我认为“替换”或“附加”在这里并不适用。据我理解,Dockerfile
很像Makefile
,这是一系列用于构建图像的指令。如果您的Dockerfile
包含ADD
或COPY
指令,这些指令指向已包含在基本映像中的文件,则基本文件确实会被“替换”(“分层”可能更准确)。我想我们还需要获得使文件可执行的权限。