Docker 和 MongoDB:启动 Mongo 并通过 Docker 文件导入数据
Docker and MongoDB: Start Mongo and Import Data via Dockerfile
我需要将 MongoDB 与 Docker 一起使用。到目前为止,我能够创建一个容器,启动 Mongo 服务器并从主机访问它(通过 Compass)。
我接下来要做的是将脚本中的数据导入到容器中 运行 的 Mongo 数据库中。
尝试导入数据时出现以下错误:
Failed: error connecting to db server: no reachable servers
我在哪呢...
docker-compose.yml:
version: '3.7'
services:
mongodb:
container_name: mongodb_db
build:
context: .
dockerfile: .docker/db/Dockerfile
args:
DB_IMAGE: mongo:4.0.9
ports:
- 30001:27017
environment:
MONGO_DATA_DIR: /data/db
MONGO_LOG_DIR: /dev/null
db_seed:
build:
context: .
dockerfile: .docker/db/seed/Dockerfile
args:
DB_IMAGE: mongo:4.0.9
links:
- mongodb
mongodb Docker文件:
ARG DB_IMAGE
FROM ${DB_IMAGE}
CMD ["mongod", "--smallfiles"]
db_seedDockerfile:
ARG DB_IMAGE
FROM ${DB_IMAGE}
RUN mkdir -p /srv/tmp/import
COPY ./app/import /srv/tmp/import
# set working directory
WORKDIR /srv/tmp/import
RUN mongoimport -h mongodb -d dbName--type csv --headerline -c categories --file=categories.csv #Failed: error connecting to db server: no reachable servers
RUN mongo mongodb/dbName script.js
我在这里做错了什么?我该如何解决这个问题?
我想保留当前的文件组织(docker-compose,mongodb Dockerfile 和 db_seed Dockerfile)。
我找到了问题的原因。在启动 mongo 服务之前正在执行导入命令。
为了解决这个问题,我使用导入命令创建了一个 .sh 脚本并使用 ENTRYPOINT 执行它。这样脚本只会在 db_seed 容器创建后执行。由于db_seed容器依赖于mongobd容器,它只会执行[=之后的脚本26=] 服务已启动。
db_seedDockerfile
ARG DB_IMAGE
FROM ${DB_IMAGE}
RUN mkdir -p /srv/tmp/import
COPY ./app/import /srv/tmp/import
ENTRYPOINT ["./srv/tmp/import/import.sh"]
我需要将 MongoDB 与 Docker 一起使用。到目前为止,我能够创建一个容器,启动 Mongo 服务器并从主机访问它(通过 Compass)。 我接下来要做的是将脚本中的数据导入到容器中 运行 的 Mongo 数据库中。 尝试导入数据时出现以下错误:
Failed: error connecting to db server: no reachable servers
我在哪呢...
docker-compose.yml:
version: '3.7'
services:
mongodb:
container_name: mongodb_db
build:
context: .
dockerfile: .docker/db/Dockerfile
args:
DB_IMAGE: mongo:4.0.9
ports:
- 30001:27017
environment:
MONGO_DATA_DIR: /data/db
MONGO_LOG_DIR: /dev/null
db_seed:
build:
context: .
dockerfile: .docker/db/seed/Dockerfile
args:
DB_IMAGE: mongo:4.0.9
links:
- mongodb
mongodb Docker文件:
ARG DB_IMAGE
FROM ${DB_IMAGE}
CMD ["mongod", "--smallfiles"]
db_seedDockerfile:
ARG DB_IMAGE
FROM ${DB_IMAGE}
RUN mkdir -p /srv/tmp/import
COPY ./app/import /srv/tmp/import
# set working directory
WORKDIR /srv/tmp/import
RUN mongoimport -h mongodb -d dbName--type csv --headerline -c categories --file=categories.csv #Failed: error connecting to db server: no reachable servers
RUN mongo mongodb/dbName script.js
我在这里做错了什么?我该如何解决这个问题? 我想保留当前的文件组织(docker-compose,mongodb Dockerfile 和 db_seed Dockerfile)。
我找到了问题的原因。在启动 mongo 服务之前正在执行导入命令。 为了解决这个问题,我使用导入命令创建了一个 .sh 脚本并使用 ENTRYPOINT 执行它。这样脚本只会在 db_seed 容器创建后执行。由于db_seed容器依赖于mongobd容器,它只会执行[=之后的脚本26=] 服务已启动。
db_seedDockerfile
ARG DB_IMAGE
FROM ${DB_IMAGE}
RUN mkdir -p /srv/tmp/import
COPY ./app/import /srv/tmp/import
ENTRYPOINT ["./srv/tmp/import/import.sh"]