Mongodb docker compose:在不重写任何内容的情况下运行命令
我有一个docker compose文件,看起来像:Mongodb docker compose:在不重写任何内容的情况下运行命令,mongodb,docker,raspberry-pi,docker-compose,Mongodb,Docker,Raspberry Pi,Docker Compose,我有一个docker compose文件,看起来像: version: "3" services: mongoDB: restart: unless-stopped volumes: - "/data/db:/data/db" ports: - "27017:27017" - "28017:28017" image: "andresvidal/rpi3
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
我正在为其他人构建的raspberry pi使用一个mongoDB容器(我刚刚从docker hub中获取),问题是如果由于任何原因出现不正确的关闭,该容器无法处理/data/db目录中的mongod.lock文件
在这种情况下,在尝试重新启动所有容器时,mongodb容器将保持退出状态,状态代码为100,唯一的修复方法是通过在我的终端中运行sudo rm/data/db/mongod.lock手动删除锁文件。但是,我希望在mongodb容器启动之前或尝试重新启动时,自动执行此操作并在docker compose文件中运行此命令
我不想弄乱mongodb的docker文件,因为它是由其他人构建的(顺便说一句,在其他人的docker文件中进行更改是一种好做法吗?),所以我想使用我的docker compose文件。我不能使用entrypoint或command选项,因为我不想覆盖Dockerfile中的任何默认命令,我只想运行这个额外的命令,而不影响其他任何操作:
sudo rm /data/db/mongod.lock
我想在mongodb容器启动之前运行它(最坏的情况是它只会输出找不到文件),或者如果mongodb正在尝试重新启动
我愿意接受更多关于你如何建议解决这个问题的想法,所以任何帮助都是非常感谢的 您可以创建自己的Dockerfile,扩展原始的“andresvidal/rpi3-mongodb3:latest”。如果该脚本使用脚本作为入口点,则可以将命令附加到该文件的末尾(例如,运行echo xxx>>/docker ENTRYPOINT.sh) 然后,在docker compose中,您应该使用自己的图像,这些图像基于其他人开发的图像。是的,改变Dockerfile文件不是一个好主意,但如果你看到问题或改进,你应该尝试并提出修改建议
我的建议是,在导入原始Dockerfile时不要使用“最新”,而是导入特定版本。这样,您就可以更好地控制如何导入将来的更改。Hi!我完全按照你说的做了,最终直接编辑了他的docker-entrypoint.sh脚本并构建了一个新的图像。我只是简单地添加了一个mongod.lock文件存在性检查,如果存在,就会将其删除。这个重启问题现在似乎没有发生,我将在github上向他发送一个pull请求:D谢谢。