gpt4 book ai didi

mongodb - docker-compose:运行命令而不覆盖任何内容

转载 作者:可可西里 更新时间:2023-11-01 09:47:34 25 4
gpt4 key购买 nike

我有一个看起来像这样的 docker-compose 文件:

version: "3"

services:
mongoDB:
restart: unless-stopped
volumes:
- "/data/db:/data/db"
ports:
- "27017:27017"
- "28017:28017"
image: "andresvidal/rpi3-mongodb3:latest"
mosquitto:
restart: unless-stopped
ports:
- "1883:1883"
image: "mjenz/rpi-mosquitto"
FG:
privileged: true
network_mode: "host"
depends_on:
- "mosquitto"
- "mongoDB"
volumes:
- "/home/pi:/home/pi"
- "/boot:/boot"
image: "arkfreestyle/fg:v1.8"
entrypoint: /app/docker-entrypoint.sh
restart: unless-stopped

我正在为其他人构建的树莓派使用 mongoDB 容器(我刚从 docker-hub 中提取它),问题是如果由于任何原因不正确关闭,容器无法处理 mongod/data/db 目录下的 .lock 文件。

在这种情况下,在尝试重新启动所有容器时,mongodb 容器一直退出,状态码为 100,解决它的唯一方法是通过运行以下命令手动删除锁定文件:sudo rm/data/db/mongod。锁定我的终端。但是,我希望在 mongodb 容器启动之前或尝试重新启动时在我的 docker-compose 文件中自动执行此操作并运行此命令。

我不想弄乱 mongodb 的 Dockerfile,因为它是由其他人构建的(顺便说一下,对其他人的 Dockerfile 进行更改是一种好习惯吗?),所以我想使用我的 docker-compose 文件。我不能使用入口点或命令选项,因为我不想覆盖 Dockerfile 中的任何默认命令,我只想运行这个额外的命令而不弄乱其他任何东西:

sudo rm /data/db/mongod.lock

我想在 mongodb 容器启动之前运行它(最坏的情况它只会输出找不到文件),或者如果 mongodb 正在尝试重新启动。

对于您建议如何解决此问题的更多想法,我也持开放态度,因此非常感谢您的帮助!

最佳答案

您可以创建自己的 Dockerfile 来扩展原始“andresvidal/rpi3-mongodb3:latest”。如果那个使用脚本作为入口点,您可以在该文件的末尾附加您的命令(例如 RUN echo xxx >>/docker-entrypoint.sh)。

然后在 docker-compose 中你应该使用你自己的图像,这些图像是基于别人开发的图像。是的,从其他人那里更改 Dockerfile 不是一个好主意,但如果您发现问题或改进,您应该尝试向它们提出更改。

我的建议是在导入原始 Dockerfile 时不要使用“最新”,而是使用特定版本。这样您就可以更好地控制导入 future 更改的方式。

关于mongodb - docker-compose:运行命令而不覆盖任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55509720/

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