首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改从现有docker镜像创建的docker镜像

修改从现有docker镜像创建的docker镜像
EN

Stack Overflow用户
提问于 2014-11-24 20:40:25
回答 3查看 63.4K关注 0票数 26

通过遵循操作指南,我已经在现有镜像的基础上创建了一个新镜像。

我没有原始图像的Dockerfile,当容器启动时发生了一些我无法改变的事情--这看起来就是这样的。

有没有办法修改基础镜像Dockerfile中的命令?

例如,容器在启动时运行bash脚本,我想要更改这一点。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-12 18:51:03

为了回答你的特定问题:“容器在启动时运行bash脚本,我想要更改这一点”。假设您想要运行/script.sh (镜像的一部分)而不是默认的,您可以使用以下命令实例化一个容器:

代码语言:javascript
复制
docker run --entrypoint /script.sh repo/image

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

  1. 创建一个空目录,并在其中复制或创建script.sh
  2. create Dockerfile,内容如下:

从存储库/ /script.sh

  • docker build -t="myimage" .

  • docker run myimage

添加入口点script.sh

备注:

docker hub在运行容器时(步骤4),不再需要指定--entrypoint,因为我们在Dockerfile.

  • It's中已经默认了它真的很简单;不需要注册到
  • 或任何类似的东西(尽管这当然是及时推荐的;-)
票数 27
EN

Stack Overflow用户

发布于 2014-11-24 20:58:32

只需在空目录中创建一个新的Dockerfile即可。使用以下命令启动Dockerfile

代码语言:javascript
复制
FROM repo/image 

其中'repo/ image‘是您当前使用的镜像的id。

并在下面添加您的自定义设置。

这样,您就可以构建一个基于另一个映像的新映像。

特别是,要更改在启动时运行的命令,请输入CMD和/或入口点行。

票数 4
EN

Stack Overflow用户

发布于 2014-11-25 17:53:58

如果使用本教程中的命令启动容器失败,则基本映像很可能引入了入口点。为docker run指定的任何命令都将作为选项附加到入口点命令。因此,给定例如/usr/bin/somescript的入口点,

代码语言:javascript
复制
docker run -d --name newguest -p 8080:80 mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND

将导致容器执行

代码语言:javascript
复制
/usr/bin/somescript /usr/sbin/httpd -D FOREGROUND

而不是

代码语言:javascript
复制
/usr/sbin/httpd -D FOREGROUND

要删除入口点,请使用--entrypoint选项:

代码语言:javascript
复制
docker run --entrypoint "" -d --name newguest -p 8080:80 mymod/httpd:v1 /usr/sbin/httpd -D FOREGROUND
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27105112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档