Docker commit不会对容器union文件系统进行更改

时间:2015-02-23 06:42:13

标签: jenkins boot2docker dockerhub

这可能在某个时候被提出过,但我无法在任何地方找到它。我似乎无法(或无法弄清楚如何)对docker镜像提交更改,而不会丢失我提交的容器中的文件更改。这是我的用例。 我在Windows上使用Boot2Docker,

Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): linux/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8

我从dockerHub中提取最新版本的jenkins。

docker pull jenkins

我运行它,重新路由它的网络接口端口

docker run -dt -p 8010:8080 jenkins

我去界面安装一些插件。我安装插件然后重启Jenkins。然后我尝试提交我的更改。

docker commit $(docker ps -lq) <my_user_name_on_docker_hub>/<name_of_the_new_image>

docker ps -lq返回最后一个正在运行的容器的id。由于我此时只运行此容器,我确定这会返回正确的ID(我还通过执行docker ps并实际查找容器来检查它) 然后我推动改变。

docker push <my_user_name_on_docker_hub>/<name_of_the_new_image>

推送通过dockerHub上已经存在的所有修订并跳过它们直到它到达最后一个并上传4兆字节到注册表。然而,当我尝试运行这个新图像时,它只是jenkins的基本图像,没有任何变化。没有我安装的插件。据我所知,应该提交对映像的union文件系统的更改(jenkins插件作为二进制文件安装)。我需要有一个新的图像,我的更改。

我做错了什么?

编辑:我创建了几个测试作业,运行它们,使用docker exec -it bash在文件系统中走动,jenkins为/ var / jenkins_home /下的每个作业创建一个新目录作业,但是当我做docker diff时,它表明只创建了临时文件。在提交,推送,停止容器并从刚推出的图像中运行新容器之后,作业文件夹与其他所有内容一起消失。

EDIT2:我尝试在其他文件夹中创建文件,而docker diff似乎看到除了/ var / jenkins_home /目录之外的其他地方的更改。

EDIT3:这似乎是相关的 - 来自Jenkins DockerHub page

如何使用此图片

  

docker run -p 8080:8080 jenkins这将存储工作区   在/ var / jenkins_home。所有Jenkins数据都存在于那里 - 包括插件   和配置。你可能想要让它持久化   体积:

     

docker run --name myjenkins -p 8080:8080 -v / var / jenkins_home jenkins   然后,“myjenkins”命名容器的卷将是   持久性。

     

您还可以在主机中将mount绑定到卷中:

     

首先,确保jenkins用户可以访问/ your / home   容器(jenkins用户 - 通常使用uid 102 - 或使用-u root),然后:

     

docker run -p 8080:8080 -v / your / home:/ var / jenkins_home jenkins

我尝试使用-v toggle运行命令,但这并没有让我的提交更加持久。

1 个答案:

答案 0 :(得分:1)

由于没有查看詹金斯码头图片的文档,这是我的错误

  

如何使用此图片

     

docker run -p 8080:8080 jenkins这将存储工作区   在/ var / jenkins_home。所有Jenkins数据都存在于那里 - 包括插件   和配置。你可能想要让它持久化   体积:

     

docker run --name myjenkins -p 8080:8080 -v / var / jenkins_home jenkins   然后,“myjenkins”命名容器的卷将是   持久性。

https://registry.hub.docker.com/_/jenkins/