2014-02-13 197 views
1

我的问题是:詹金斯与码头工人

docker run -d -p 8080:8080 asd/jenkins # everything's ok 
# made changes at jenkins 
docker commit container_with_jenkins # comitted 
docker run -d -p 8080:8080 image_from_container_with_changes 
# => Error: create: No command specified 

我这么想吗?
如何处理码头的图像并保存容器内的更改?

回答

2

当您提交图像时,它不会从其父图像继承CMD。因此,当您基于新映像启动容器时,需要提供运行命令。

docker run -d image_from_container_with_changes java -jar /var/lib/jenkins/jenkins.war 

其中运行命令当然取决于您的具体安装。

Jenkins将其配置存储在目录中,例如, /root/.jenkins。我建议是在主机上创建一个目录并把这个作为一个卷:

docker run -v {absolute_path_to_jenkins_dir}:/root/.jenkins -d asd/jenkins 

如果以同样的方式开始新的容器,它具有相同的工作等。如果你做出改变那些进入这个目录(我不知道插件或更新的安装位置),你仍然可能想要创建一个新的映像。在这种情况下,使用-run选项,当你提交你的容器来指定新的配置,

docker commit -run='{"Cmd": ["java", "-jar", "/var/lib/jenkins/jenkins.war"]}' abc1234d 
+0

'搬运工运行-d image_from_container_with_changes Java的罐子在/ var/lib中/詹金斯/ jenkins.war' - 很好地工作,基本上回答我的问题,谢谢。但是commit命令没有做到预期的结果,看起来像'-run ='{“Cmd”:[“java”,“-jar”,“/var/lib/jenkins/jenkins.war”]}''忽略或不起作用。 Docker版本:0.8.0 – ted

+0

请查看http://docs.docker.io/en/latest/commandline/cli/#commit,这是解释了-run的地方。此外,你可以检查创建的图像,看看Cmd确实没有设置。也许0.8.0改变了一些东西 - 我在图像上使用了相同的概念,使用0.7.x – qkrijger

+1

@ted我只注意到0.8.1中的一个修复,这可能解释了您遇到的意外行为:“修复 - 在docker commit中运行。使码头提交存储 - 在图像配置中运行“ – qkrijger