2015-02-23 62 views
2

这可能在某些时候被问到,但我无法在任何地方找到它。我似乎无法(或不知道如何)提交对docker镜像的更改,而不会丢失我正在提交的容器中的文件更改。这是我的使用案例。 我用Boot2Docker在Windows上,Docker提交不会更改容器联合文件系统

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詹金斯的最新版本。

docker pull jenkins 

我运行它,它重新路由的Web界面端口

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存在,跳过所有这些,直到达到最后一个和上传四兆字节到注册表的修订版。然而,当我尝试运行这个新图像时,它只是jenkins的基本图像而没有任何改变。没有我安装的插件。据我了解,图像的联合文件系统(jenkins插件作为二进制文件安装在那里)的更改应该被提交。我需要有一个新的图像与我的变化。

我在做什么错?

编辑:我创建了几个测试工作,跑了他们,用搬运工EXEC - 它的bash在文件系统走去,詹金斯在/ var每个作业创建一个新的目录/ jenkins_home /工作机会,但是当我做码头差异,它表明只有临时文件已被创建。在提交,推送,停止容器并从刚刚推送的图像中运行一个新容器后,作业文件夹与其他所有内容一起消失。

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

EDIT3:这似乎与 - 从Jenkins DockerHub page

如何使用这个图像

搬运工运行-p 8080:8080个詹金斯这将工作区保存在 的/ var/jenkins_home。所有詹金斯的数据都在那里 - 包括插件 和配置。你可能会想使一个持久 量:

搬运工运行--name myjenkins -p 8080:8080 -v在/ var/jenkins_home詹金斯 为“myjenkins”卷命名然后容器将 执着。

您也可以绑定安装在从主机的卷:

首先,确保/你的/ home是由詹金斯用户可访问的 容器(詹金斯用户 - UID 102正常 - 或使用-u根),则:

搬运工运行-p 8080:8080 -v /您/家:在/ var/jenkins_home詹金斯

我试图运行带有-v切换的命令,但并没有真正让我的承诺更持久。

回答

1

这是我的错,不看文档的詹金斯泊坞窗图像

如何使用这个图像

搬运工运行-p 8080:8080个詹金斯这将工作区在存储 /var/jenkins_home。所有詹金斯的数据都在那里 - 包括插件 和配置。你可能会想使一个持久 量:

搬运工运行--name myjenkins -p 8080:8080 -v在/ var/jenkins_home詹金斯 为“myjenkins”卷命名然后容器将 执着。

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