docker-修改容器的挂载目录

今天新买的一块 ssd 到货了,把一些 Android系统平台的代码都迁移到这个 ssd 上去。这个 ssd 挂载到了 /media/qiushao/source-code 目录下。这样的话,我之前创建的 docker container 就读取不到这个目录的内容了。之前的 container 的创建命令为:

1
docker run -it --name aosp_builder -v ~/source:/home/builder/source -u builder aosp_builder:V1.0 /bin/bash

挂载的路径是 /home/qiushao/source, 现在我要把路径修改为 /media/qiushao/source-code 的话,要怎么做呢。
最简单的方法是把这个旧的 container 给删除了,重新创建一个 container, 用新的路径来挂载。但是之前的那个 container 我在使用过程中还不断修改了很多配置,安装了很多新软件。安装了哪些软件又不记得了。这些软件又是编译某些平台必要的。所以这个方法行不通。网上查了一下,有很多种方法,下面是我使用的一种方法介绍。

1. 提交现有 container 为镜像

1
2
3
4
5
qiushao@qiushao-pc:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
41f6f5ff41af bestwu/wechat "/entrypoint.sh" 2 weeks ago Up 36 minutes script_wechat
393ac94612d9 aosp_builder:V1.0 "/bin/bash" 2 months ago Exited (0) 36 hours ago aosp_builder
qiushao@qiushao-pc:~$

可以看到我们目前在用的 aosp_builder container id 为 393ac94612d9。我们把这个 container 提交一下,成为一个新的镜像:

1
2
3
4
5
6
7
8
9
qiushao@qiushao-pc:~$ docker commit 393ac94612d9 aosp_builder:V2.0
sha256:84f496a7977d0d9c65cb928308f6da98f4f40d3ae61dd97ed41a259d5b3c58fd
qiushao@qiushao-pc:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aosp_builder V2.0 84f496a7977d 30 seconds ago 4.68GB
aosp_builder V1.0 149ef2e2830b 2 months ago 1.23GB
bestwu/wechat latest 53c371b7016c 5 months ago 941MB
ubuntu 14.04 2c5e00d77a67 9 months ago 188MB
qiushao@qiushao-pc:~$

我们把新的镜像命名为 aosp_builder:V2.0。提交完之后,docker images 查看,发现多了一个镜像出来了。

2. 删除旧的 container

旧的 container 已经被我们提交成镜像了,我们可以删除掉了:

1
2
3
4
5
6
7
8
qiushao@qiushao-pc:~$ docker container stop aosp_builder
aosp_builder
qiushao@qiushao-pc:~$ docker container rm aosp_builder
aosp_builder
qiushao@qiushao-pc:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
41f6f5ff41af bestwu/wechat "/entrypoint.sh" 2 weeks ago Up 45 minutes script_wechat
qiushao@qiushao-pc:~$

3. 创建新的 container

1
2
3
4
5
6
7
qiushao@qiushao-pc:~$ docker run -it --name aosp_builder -v /media/qiushao/source-code:/home/builder/source -u builder aosp_builder:V2.0 /bin/bash
builder@88da927b1ee5:~$ exit
qiushao@qiushao-pc:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
88da927b1ee5 aosp_builder:V2.0 "/bin/bash" 14 seconds ago Exited (0) 9 seconds ago aosp_builder
41f6f5ff41af bestwu/wechat "/entrypoint.sh" 2 weeks ago Up 47 minutes script_wechat
qiushao@qiushao-pc:~$

至此我们就完成修改挂载目录的目的啦。