# mongo镜像获取及设置

获取mongo镜像,官方镜像地址

docker pull mongo

mongo.yml文件配置如下

version: '3.1'
services:
  mongo:
    image: mongo
    container_name: mongodb
    restart: unless-stopped
    ports:
      - 28018:27017
    volumes:
      - /workspace/docker/volume/mongodb/data/db:/data/db/
      - /workspace/docker/volume/mongodb/mongodb.conf:/etc/mongod.conf
      - /workspace/docker/volume/mongodb/mongo-entrypoint/:/docker-entrypoint-initdb.d/
    command: --config /etc/mongod.conf

执行以下命令,运行容器

docker-compose -f mongo.yml up -d

# 挂载文件说明

1、将原来mongo的数据文件,挂载到容器的/data/db路径下,这样容器删除后,数据库中的数据将不会丢失。
2、将原mongodb.conf文件,挂载到容器的/etc/mongod.conf,可以保持原有mongo的配置逻辑。
3、可在将一些初始化的操作文件,挂载到/docker-entrypoint-initdb.d/目录下,比如初始化设置用户,初始化插入数据等。

# 删除原来安装的mongo

先停止服务

sudo service mongod stop

# 删除服务开机启动文件

/lib/systemd/system/mongodb.service

[Unit]
Description=An object/document-oriented database
Documentation=man:mongod(1)
After=network.target

[Service]
User=root
RuntimeDirectory=mongodb
RuntimeDirectoryMode=0755
EnvironmentFile=-/etc/default/mongodb
Environment=CONF=/etc/mongodb.conf
Environment=SOCKETPATH=/run/mongodb
ExecStart=/usr/bin/mongod --unixSocketPrefix=${SOCKETPATH} --config ${CONF} $DAEMON_OPTS
LimitFSIZE=infinity
LimitCPU=infinity
LimitAS=infinity
LimitNOFILE=64000
LimitNPROC=64000

[Install]
WantedBy=multi-user.target

# 卸载相关软件包

sudo apt-get purge mongodb mongodb-clients mongodb-server mongodb-dev mongodb-10gen
sudo apt-get autoremove

# 删除数据文件

sudo rm -r /var/log/mongodb (日志目录)
sudo rm -r /var/lib/mongodb (数据目录)

# 迁移过程中遇到的一些问题

# 一、容器外无法链接成功

1、检查mongo配置中绑定的ip地址,不能使用127.0.0.1,可以删除,或设置为0.0.0.0
2、如果使用命令工具远程链接,需要保持客户端与容器内版本一致,否则也会链接失败。

# 二、直接挂载data目录到容器内的/data文件

这样挂载是无法挂载成功的,容器中的mongo会初始化db文件夹。

# 三、mongo备份并在容器中恢复

在宿主机执行如下命令,可备份所有数据库数据

mongodump -o /backup

通过如下命令,将数据复制到容器中

docker cp /backup mongodb:/backup

上面的mongodb为容器名称

进入容器中

docker exec -it mongodb bash

恢复所有数据

mongorestore --dir /backup