有时候编写runc的config.json确实是蛋疼的一件事,后来发现可以直接生成,睿智了。
拿postgresql举例子吧,首先先用docker运行它的镜像。
docker run -d postgres:10.7-alpine
然后去/run/docker下面去查找config.json
$ sudo find /run/docker -iname "config.json"
/run/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/5f07822f92ebf2c485a6dfac8771de4b4fc8fdc4dcabab23adb1337fc847b665/config.json
5f07822f92ebf2c485a6dfac8771d这一串东西就是上面那个容器的id。
之后可以把镜像打包成tgz
docker export $(docker create postgres:10.7-alpine) | tar -C rootfs -xvf -
然后把rootfs下的所有东西直接打包
tar -czf postgres.tar.gz rootfs
!!!如果不打包rootfs这个文件夹的话,而是打包里面的文件,有时会出现runc运行容器提示里面的命令权限不足的问题,这是个很蛋疼的问题,很不好察觉
如果要在其他地方运行这个容器的话,需要改一改config.json里面的一些配置信息,比如里面的
{
"root" : {
"path" : "/var/lib/docker/overlay2/containerID/merged",
"readonly": false
}
}
path需要改成/you-path/rootfs
也可以在mounts下加上挂载,
{
"destination": "/var/lib/postgresql/data",
"type": "bind",
"source": "/data",
"options": [
"rbind",
"rprivate"
]
}