如何将存储在远程服务器中的mongo数据复制到我的本地docker容器中?

时间:2019-09-06 18:03:42

标签: mongodb docker docker-compose

我是mongo的新手,我有一个使用mongo来存储数据的Web应用程序。我可以让该应用程序运行docker compose,但是当我这样做时,数据就被遗漏了。 mongo数据位于远程主机中,我需要复制所有数据并将其存储到mongo容器中,以便dockerized应用程序以相同的数据运行

根据我在研究时发现的一些代码,我试图将数据从远程主机转储到容器上。

# Backup DB
docker run \
 --rm \
 --link running_mongo:mongo \
 -v /data/mongo/backup:/backup \
 mongo \
 bash -c ‘mongodump --out /backup --host 10.22.150.7:27017’
 # Download the dump
scp -r jsikala@10.22.150.7:/data/mongo/backup ./backup

我这样做的结果是

[jsikala@koala-jsikala koala]$ docker run  --rm  --link running_mongo:3.2.0  -v /data/mongo/backup:/backup  mongo  bash -c ‘mongodump --out /backup --host 10.22.150.7:27017’
Unable to find image 'mongo:latest' locally
latest: Pulling from library/mongo
Digest: sha256:93c98ffc714faa1fa501297d35670a62835dbb7e62243cee0c491433ea523f30
Status: Image is up to date for mongo:latest
docker: Error response from daemon: could not get container for running_mongo: No such container: running_mongo.
See 'docker run --help'.

我认为我做了一些琐碎的错误。

这是我的docker-compose文件,提供有关可能发生的情况的一些上下文信息

version: "3"
volumes:
    data:
        external:
            name: ${MONGO_VOLUME_NAME}
services:
    rails:
        image: rails2
        container_name: koala_rails_${USER}
        environment: 
            - KOALA_ENV
            - RAILS_PORT
            - KOALA_INGEST_URL=${INGEST_PROTOCOL}://ingest:${INGEST_PORT}
            - KOALA_MONGO_URL=mongo_service:27017
            - KOALA_REDIS_URL=redis_service:6379
            - KOALA_PKI_IN_DEV
            - KOALA_USER_ID_HEADER
            - USER
            - USERNAME
            - KOALA_REGISTER_USER_URL
            - KOALA_SECURITY_VALIDATOR_URL
            - CERT_FILE_PEM=/usr/src/app/certs/public.pem
            - PRIVATE_CERT_FILE_PEM=/usr/src/app/certs/private-key.pem
            - SSL_CA_FILE=/usr/src/app/certs/ca.pem
            - LOGNAME
            - KOALA_SECRET_KEY_BASE
            - KOALA_MONGO_USERNAME
            - KOALA_MONGO_PASSWORD
            - KOALA_HELP_URL
            - KOALA_CONTACT_EMAIL
            - KOALA_USE_CERTS
            - BUNDLE_GEMFILE
            - KOALA_SERVER_URL
            - RAILS_SERVE_STATIC_FILES
            - RAILS_LOG_TO_STDOUT
        ports:
            - "${RAILS_PORT}:${RAILS_PORT}"
        volumes:
            - ${CERT_FILE_PEM}:/usr/src/app/certs/public.pem
            - ${PRIVATE_CERT_FILE_PEM}:/usr/src/app/certs/private-key.pem
            - ${SSL_CA_FILE}:/usr/src/app/certs/ca.pem
        links:
            - mongo_service
            - redis_service
            - ingest
        depends_on:
            - mongo_service
            - redis_service
    mongo_service:
        image: mongo:3.2.0
        volumes:
            - data:/data/db
        ports:
            - "27017:27017"
    redis_service:
        image: redis
        restart: always
        ports:
            - "6379:6379"
    ingest:
        image: ingest
        container_name: koala_ingest_${USER}
        extra_hosts:
            - csie.as.northgrum.com:10.8.131.12
        environment:
            - KOALA_ENV
            - KOALA_CONFIG_FILE=/go/config.yml
            - INGEST_PORT
            - LOGNAME
            - KOALA_JIRA_URL
            - KOALA_JIRA_SESSION_URL
            - CERT_FILE_PEM=/go/certs/public.pem
            - PRIVATE_CERT_FILE_PEM=/go/certs/private-key.pem
            - SSL_CA_FILE=/go/certs/ca.pem
            - KOALA_REDIS_URL=redis_service:6379
            - KOALA_MONGO_URL=mongo_service:27017
            - KOALA_USE_CERTS
            - KOALA_MONGO_USERNAME
            - KOALA_MONGO_PASSWORD
            - JIRA_USERNAME=jsikala
            - JIRA_PASSWORD=changeme123
        ports:
            - "${INGEST_PORT}:${INGEST_PORT}"
        volumes:
            - ${CERT_FILE_PEM}:/go/certs/public.pem
            - ${PRIVATE_CERT_FILE_PEM}:/go/certs/private-key.pem
            - ${SSL_CA_FILE}:/go/certs/ca.pem
        links:
            - mongo_service
        depends_on:
            - mongo_service
            - redis_service

基本上,一旦docker-compose文件运行之后,应用程序就会部署一些数据,就像在远程主机上一样。由于我似乎无法将远程主机中的数据导出/转储到我的容器中,因此该应用程序没有所需的数据。

1 个答案:

答案 0 :(得分:0)

docker run是用于启动运行中的mongo容器的命令。您无需开始运行新容器即可从现有容器中转储数据。

如果要在容器中运行命令,则需要运行docker ps查找容器的名称,然后运行docker exec在容器中运行命令(或连接到容器中的外壳)。

尽管您完全不需要连接到容器即可运行mongoexport -您应该能够使用正确的端口和凭据运行mongoexport来转储数据。