我是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文件运行之后,应用程序就会部署一些数据,就像在远程主机上一样。由于我似乎无法将远程主机中的数据导出/转储到我的容器中,因此该应用程序没有所需的数据。
答案 0 :(得分:0)
docker run
是用于启动运行中的mongo容器的命令。您无需开始运行新容器即可从现有容器中转储数据。
如果要在容器中运行命令,则需要运行docker ps
查找容器的名称,然后运行docker exec
在容器中运行命令(或连接到容器中的外壳)。
尽管您完全不需要连接到容器即可运行mongoexport
-您应该能够使用正确的端口和凭据运行mongoexport
来转储数据。