【发布时间】:2017-09-06 13:23:57
【问题描述】:
我无法使用 redis 数据库中的数据创建 docker redis 容器的映像。目前我正在这样做:
docker pull redis
docker run --name my-redis -p 6379:6379 -d redis
redis-cli
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> save
OK
127.0.0.1:6379> exit
docker stop my-redis
docker commit my-redis redis_with_data
docker run --name my-redis2 -p 6379:6379 -d redis_with_data
redis-cli
127.0.0.1:6379> keys *
(empty list or set)
我显然不了解这里的一些非常基本的东西。 docker commit 不会从现有容器创建新镜像吗?
好的,我一直在做一些挖掘工作。 hub.docker 上的默认 redis 映像使用数据卷,然后将其安装在容器中的 /data 处。为了在容器之间共享此卷,您必须使用以下参数启动一个新容器:
docker run -d --volumes-from <name-of-container-you-want-the-data-from> \
--name <new-container-name> -p 6379:6379 redis
注意参数的顺序很重要,否则 docker run 会静默失败。
docker volume ls
会告诉你 docker 已经在你的计算机上创建了哪些数据卷。我还没有找到一种方法来给这些卷起一个简单的名字,而不是一个长的随机字符串。
我还没有找到挂载数据卷的方法,而只是使用--volumes-from 命令。
好的。我现在可以使用它了,但它很笨拙。
有
docker volume ls
docker volume inspect <id of docker volume>
您可以在本地文件系统上找到 docker 卷的路径。 然后,您可以将其挂载到新容器中,如下所示:
docker run -d -v /var/lib/docker/volumes/<some incredibly long string>/_data:/data \
--name my-redis2 -p 6379:6379 redis
这显然不是你应该这样做的方式。我会继续挖掘。
我将我迄今为止发现的所有内容都写在了一篇博文中:my blog post on medium.com
也许这对某人有用
【问题讨论】: