我有一个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,因为它是由其他人构建的(顺便说一句,是对其他人的Dockerfiles进行更改吗?),所以我想使用docker-compose文件。我不能使用入口点或命令选项,因为我不想覆盖Dockerfile中的任何默认命令,我只想运行此额外的命令而不弄乱其他任何东西:
sudo rm /data/db/mongod.lock
我想在mongodb容器启动之前运行此程序(最坏的情况是它只会输出未找到的文件),或者如果mongodb正在尝试重新启动。
我也欢迎您提出更多有关如何解决此问题的建议,因此我们将不胜感激!
答案 0 :(得分:1)
您可以创建自己的Dockerfile,以扩展原始的“ andresvidal / rpi3-mongodb3:latest”。如果该用户使用脚本作为ENTRYPOINT,则可以在该文件的末尾附加命令(例如RUN echo xxx >> /docker-entrypoint.sh)。
然后在docker-compose中,您应该使用自己的图像,该图像基于其他人开发的图像。是的,从其他人更改Dockerfile并不是一个好主意,但是如果您发现问题或改进,则应尝试提出对它们的更改。
我的建议是,当您导入原始Dockerfile而不是特定版本时,不要使用“最新”。这样,您就可以更好地控制如何导入将来的更改。