Docker commit 不会更改容器联合文件系统
Docker commit doesn't make changes to containers union file system
这可能在某个时候有人问过,但我在任何地方都找不到。我似乎无法(或无法弄清楚如何)在不丢失我正在提交的容器中的文件更改的情况下提交对 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 returns 最后一个 运行ning 容器的 id。因为我现在 运行 只有这个容器,所以我确定这个 returns 是正确的 ID(我也通过 docker ps 检查了它,实际上查找容器)
然后我推送更改。
docker push <my_user_name_on_docker_hub>/<name_of_the_new_image>
推送会遍历 dockerHub 上已经存在的所有修订,然后将它们全部跳过ps,直到到达最后一个并将 4 兆字节上传到注册表。然而,当我尝试 运行 这个新图像时,它只是 jenkins 的基本图像,没有任何变化。没有我安装的插件。据我所知,应该提交对图像的联合文件系统的更改(jenkins 插件作为二进制文件安装在那里)。我需要一个包含我的更改的新图像。
我做错了什么?
编辑: 我创建了几个测试作业,运行 它们,使用 docker exec -it [=53= 在文件系统中走动],并且 jenkins 在 /var/jenkins_home/jobs 下为每个作业创建一个新目录,但是当我执行 docker diff 时,它显示仅创建了临时文件。在提交、推送、停止容器并运行从刚刚推送的图像中创建一个新容器后,作业文件夹与其他所有内容一起消失。
EDIT2: 我尝试在其他文件夹中创建文件,docker diff 似乎在除 /var/jenkins_home/ 目录之外的其他任何地方都看到了变化。
EDIT3: 这似乎是相关的——来自 Jenkins DockerHub page
如何使用这张图片
docker run -p 8080:8080 jenkins This will store the workspace in
/var/jenkins_home. All Jenkins data lives in there - including plugins
and configuration. You will probably want to make that a persistent
volume:
docker run --name myjenkins -p 8080:8080 -v /var/jenkins_home jenkins
The volume for the “myjenkins” named container will then be
persistent.
You can also bind mount in a volume from the host:
First, ensure that /your/home is accessible by the jenkins user in
container (jenkins user - uid 102 normally - or use -u root), then:
docker run -p 8080:8080 -v /your/home:/var/jenkins_home jenkins
我尝试 运行使用 -v 切换命令,但这并没有真正让我的提交更加持久。
我没有看 Jenkins docker 图片的文档是我的错
How to use this image
docker run -p 8080:8080 jenkins This will store the workspace in
/var/jenkins_home. All Jenkins data lives in there - including plugins
and configuration. You will probably want to make that a persistent
volume:
docker run --name myjenkins -p 8080:8080 -v /var/jenkins_home jenkins
The volume for the “myjenkins” named container will then be
persistent.
这可能在某个时候有人问过,但我在任何地方都找不到。我似乎无法(或无法弄清楚如何)在不丢失我正在提交的容器中的文件更改的情况下提交对 docker 图像的更改。这是我的用例。 我在 Windows、
上使用 Boot2DockerClient 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 returns 最后一个 运行ning 容器的 id。因为我现在 运行 只有这个容器,所以我确定这个 returns 是正确的 ID(我也通过 docker ps 检查了它,实际上查找容器) 然后我推送更改。
docker push <my_user_name_on_docker_hub>/<name_of_the_new_image>
推送会遍历 dockerHub 上已经存在的所有修订,然后将它们全部跳过ps,直到到达最后一个并将 4 兆字节上传到注册表。然而,当我尝试 运行 这个新图像时,它只是 jenkins 的基本图像,没有任何变化。没有我安装的插件。据我所知,应该提交对图像的联合文件系统的更改(jenkins 插件作为二进制文件安装在那里)。我需要一个包含我的更改的新图像。
我做错了什么?
编辑: 我创建了几个测试作业,运行 它们,使用 docker exec -it [=53= 在文件系统中走动],并且 jenkins 在 /var/jenkins_home/jobs 下为每个作业创建一个新目录,但是当我执行 docker diff 时,它显示仅创建了临时文件。在提交、推送、停止容器并运行从刚刚推送的图像中创建一个新容器后,作业文件夹与其他所有内容一起消失。
EDIT2: 我尝试在其他文件夹中创建文件,docker diff 似乎在除 /var/jenkins_home/ 目录之外的其他任何地方都看到了变化。
EDIT3: 这似乎是相关的——来自 Jenkins DockerHub page
如何使用这张图片
docker run -p 8080:8080 jenkins This will store the workspace in /var/jenkins_home. All Jenkins data lives in there - including plugins and configuration. You will probably want to make that a persistent volume:
docker run --name myjenkins -p 8080:8080 -v /var/jenkins_home jenkins The volume for the “myjenkins” named container will then be persistent.
You can also bind mount in a volume from the host:
First, ensure that /your/home is accessible by the jenkins user in container (jenkins user - uid 102 normally - or use -u root), then:
docker run -p 8080:8080 -v /your/home:/var/jenkins_home jenkins
我尝试 运行使用 -v 切换命令,但这并没有真正让我的提交更加持久。
我没有看 Jenkins docker 图片的文档是我的错
How to use this image
docker run -p 8080:8080 jenkins This will store the workspace in /var/jenkins_home. All Jenkins data lives in there - including plugins and configuration. You will probably want to make that a persistent volume:
docker run --name myjenkins -p 8080:8080 -v /var/jenkins_home jenkins The volume for the “myjenkins” named container will then be persistent.