我有一个名为xyz的正在运行的Mongo数据库容器来自官方Mongo Image。我使用docker run -d -p 21707:21707 mongo
创建了容器
在这个容器中,我创建了2个包含样本数据的集合。
现在我想在dockerhub上的新图像中提取此容器。
我使用docker commit
并创建了一个新图像,将其推送到docker hub。如果我在另一个系统上拉图像并从该图像创建一个新容器,则我的原始容器xyz中没有数据。
经过研究我发现mongo图像可以用于卷,但我过去错过了这一步...我认为容器使用/ data / db作为标准卷(docker inspect
),on提交此卷未附加到新映像?!
我也尝试了docker export/import
上面提到的同样问题!
现在我的问题,我怎样才能在新的图像/容器中使用我的样本数据迁移这个“xyz”运行容器? 非常感谢!
答案 0 :(得分:5)
我使用了docker commit并创建了一个新图像,将其推送到docker hub。如果我在另一个系统上拉图像并从该图像创建一个新容器,则没有像我的原始容器xyz中那样的数据。
mongo docker镜像将其数据写入volume。因此,这些数据不会保存到使用docker commit
创建的新docker镜像。由于同样的原因,docker export
不会生成您的数据。
我怎样才能将这个“xyz”运行容器与我的样本数据一起迁移到新的图像/容器中?
你想要的是:
--volumes-from
docker run
-v
option 此外,此SO question可能会帮助您确定数量。
答案 1 :(得分:1)
我想制作一个图片来测试身份验证方面的问题,我也有同样的问题。我这样解决了:
<强> Dockerfile 强>
FROM mongo
COPY setup.sh /
RUN chmod +x /setup.sh
RUN /setup.sh
ENTRYPOINT ["/usr/bin/mongod"]
CMD ["--auth", "--dbpath=/containerdb"]
<强> setup.sh 强>
#!/bin/bash
mkdir containerdb
mongod --auth --dbpath=/containerdb &
until mongo admin --eval 'db.createUser({"user":"root", "pwd":"password", "roles": [ "root" ] })'
do
echo 'Mongo not yet ready, waiting 1 sec until retry'
sleep 1
done
mongod --shutdown --dbpath=/containerdb
的Bim!运行此映像时,您将拥有一个激活了身份验证的mongodb和一个root用户。 关键是通过将数据存储在其他地方来解决基本Dockerfile中的VOLUME。