当前位置: 首页 > 知识库问答 >
问题:

docker compose:在不重写任何内容的情况下运行命令

仲孙鸿飞
2023-03-14

我有一个docker撰写文件,它看起来像:

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中提取),问题是如果由于任何原因出现不正确的关闭,html" target="_blank">容器无法处理mongod。锁定/data/db目录中的文件。

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

我不想弄乱mongodb的Dockerfile,因为它是由其他人构建的(顺便说一句,在其他人的Dockerfile中进行更改是一种好的做法吗?),所以我想使用我的docker compose文件。我不能使用entrypoint或command选项,因为我不想覆盖Dockerfile中的任何默认命令,我只想运行这个额外的命令,而不影响其他任何操作:

sudo rm /data/db/mongod.lock

我想在mongob容器启动之前运行这个(最坏的情况下,它只会输出没有找到文件),或者mongob试图重新启动。

我也愿意接受更多关于您如何建议解决这个问题的想法,因此感谢您的任何帮助!

共有1个答案

杜炫明
2023-03-14

您可以创建自己的Dockerfile,扩展原始的“andresvidal/rpi3-mongodb3:latest”。如果该文件使用脚本作为入口点,则可以将命令附加到该文件的末尾(例如,运行echo xxx)

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

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

 类似资料:
  • 问题内容: 我在Docker容器上安装了Nginx,并且正在尝试像这样运行它: 问题在于Nginx的工作方式,即初始进程会立即产生一个主要的Nginx进程和一些工作程序,然后退出。由于Docker仅监视原始命令的PID,因此容器将暂停。 如何防止容器停止?我需要能够告诉它绑定到第一个子进程,或者阻止Nginx的初始进程退出。 问题答案: 像所有行为良好的程序一样,可以配置为不自我守护。 使用htt

  • 我正在开发一个spring启动应用程序并编写一些junit测试。 但我发现,当我运行任何测试时,tomcat也会启动,这使得这些测试非常缓慢,浪费了很多时间。 当我开发一个SpringMvc应用程序时,junit测试可以在不启动tomcat的情况下运行,这节省了很多时间。 所以,我想问它在那里无论如何要运行启动tomcat的springstart测试?

  • 我只需要"解除屏蔽"我的终端后...有一些选项或setpup为它? 注意:我的服务正在使用,因此假设不需要在命令行上使用。 PS:我需要保持容器运行,我不需要使用

  • 问题内容: 我已经在.jar文件清单中指定了Java程序的主类和类路径,但有时我想运行与该属性指定的类不同的类。我可以在仍然从清单中拉出类路径的同时让Java启动此类,这样我就不必在命令行上用来指定整个东西了吗? 问题答案: 只需使用-cp将jar文件放在命令行中即可;然后,即使您未使用-jar,Java也会观察清单中的classpath属性:

  • 我有代码,工作完全按要求。但是,我们的企业构建服务器拒绝任何带有编译器警告的签入。 由于我没有使用await语句,因此(如预期的那样)对于带有操作to Func转换的操作构造函数显示了以下警告。 更新-建议答案#1 _operation=()=>new Task(operation.invoke); _rollback=()=>new Task(rollback.invoke); 更新-接受的答案

  • 问题内容: 我想要以下内容。 我只需要一个可以从Maven存储库下载jar及其依赖项的实用程序,而对我的项目的构建方式没有任何限制。 我想要这样的东西: 它也应该能够下载依赖项。 更新: 我不知道应该构造pom.xml。 我唯一需要完成的任务是下载jar,我希望有一个工具可以完成此任务,而不会让我烦恼过多的信息。 有那样的东西吗? 问题答案: 如果要将maven依赖项下载到lib目录中,请使用带有