【问题标题】:Add new command to CMD without overriding existing在不覆盖现有命令的情况下向 CMD 添加新命令
【发布时间】:2018-12-09 10:27:55
【问题描述】:

我想使用现有的 docker 映像并添加新命令,而不在 cmd 中覆盖命令。

Dockerfile

FROM telegrammessenger/proxy

COPY mtproto_stats .

CMD [ "/bin/sh", "-c", "/bin/bash /run.sh", "/bin/bash ./mtproto_stats" ]

在这里我尝试执行我复制到容器 CMD ["/bin/sh", "-c", "/bin/bash /run.sh", "./mtproto_stats" 的程序强>]

这个命令"/bin/sh", "-c", "/bin/bash /run.sh" 我在运行容器上使用docker inspect

我的程序应该与容器一起运行并一直工作,我正在尝试使用 "./mtproto_stats & disown" 但它没有帮助

【问题讨论】:

  • 不清楚你想要达到什么目的。
  • @dpwrussell 运行/run.sh 然后./mtproto_stats,但./mtproto_stats 仅在我将其放入入口点时运行,但如果将其放入入口点/run.sh 将不会运行
  • 我认为您不了解 entrypointcommand 的实际作用以及命令的工作原理。 command 不是命令列表,它是单个命令。如果您希望您的容器做两件事,那么您需要制作一个运行脚本来创建入口点。然后,运行脚本将依次启动 run.shmtproto_stats,或者如果一个/两个都是服务,则使用多种技术之一来分离这些进程。

标签: docker


【解决方案1】:

这个命令 "/bin/sh", "-c", "/bin/bash /run.sh" 我在运行容器上使用 docker inspect 得到的

"/bin/sh", "-c" 是默认的ENTRYPOINT"/bin/bash /run.sh"CMD

在你的情况下,你应该有,使用 CMD 的 shell 形式:

FROM telegrammessenger/proxy

COPY mtproto_stats .
COPY wrapper.sh /wrapper.sh
CMD exec /wrapper.sh

使用 wrapper.sh:

#!/bin/bash
exec /path/to/mtproto_stats & disown
exec /run.sh

我将run.sh 放在最后,因为它应该是保持容器存活的主进程。

【讨论】:

    猜你喜欢
    • 2012-10-30
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多