gpt4 book ai didi

mongodb - 如何从Dockerfile运行mongorestore?

转载 作者:行者123 更新时间:2023-12-02 19:52:52 25 4
gpt4 key购买 nike

我正在尝试通过在Dockerfile中添加RUN mongorestore --archive=archivefile在Docker容器中设置测试mongo数据库。

整个testdb.Dockerfile看起来像这样

FROM mongo

COPY archivefile /
WORKDIR /
RUN mongorestore --archive='./archivefile'

哪个应该运行命令并从备份中测试数据库。但是,我得到了这个结果。
error connecting to host: could not connect to server: server selection error: server selection timeout
current topology: Type: Single
Servers:
Addr: localhost:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: connection(localhost:27017[-121]) connection is closed

我抬起头来,原来我需要先运行 mongod,所以我将dockerfile更改为
FROM mongo

COPY archivefile /
WORKDIR /
RUN mongod &
RUN mongorestore --archive='./archivefile'

没有运气,同样的事情发生了。我什至尝试添加 sleep命令来完全等待mongod的建立。

我也尝试过这个 How to run mongorestore after mongod in docker
但是我有同样的问题。

供引用,这是我的最小 docker-compose文件
services:
mongo:
container_name: mongo
build:
context: .
dockerfile: testdb.Dockerfile
ports:
- "27017:27017"
app:
# other stuff
links:
- mongo

我希望仅这两个容器相互通信,但是我不介意添加第三个容器。
任何帮助表示赞赏,谢谢。

最佳答案

您可以使用两种方法在docker构建期间还原数据库,并且第一种方法完全不会启动mongo DB服务,第二种方法每个运行命令都在单独的shell中运行,另外还需要附加Docker镜像卷,因此您在下面需要所有这些。

FROM mongo
COPY initdb.js /docker-entrypoint-initdb.d/

初始化一个新实例

When a container is started for the first time it will execute files with extensions .sh and .js that are found in /docker-entrypoint-initdb.d. Files will be executed in alphabetical order. .js files will be executed by mongo using the database specified by the MONGO_INITDB_DATABASE variable, if it is present, or test otherwise. You may also switch databases within the .js script.



Initializing a fresh instance with DB

关于mongodb - 如何从Dockerfile运行mongorestore?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59433157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com