docker - 如何从 docker-compose 命令 : 运行 2 个不同的命令

标签 docker go docker-compose

我想从 docker-compose 为我的服务运行 2 个不同的命令。

  1. bash脚本.sh
  2. 配置/etc/config.yaml

目前,我的 docker-compose 如下所示。我希望 bash 脚本在配置命令之后运行

docker-compose.yaml:

services:
   API:
        build: .
        ports:
            - 8080:8080
        environment:
         - "USER=${USER}"
         - "PASSWORD=${PASSWORD}"
        volumes:
            - ./conf/config.yaml:/etc/api.yaml
        command: ["-config", "/etc/api.yaml"]

最佳答案

编写一个新的入口点脚本。

#!/bin/bash

/bin/api "$@"

# perhaps
source /script.sh

# or exec
exec /script.sh

在构建时将其复制到您的镜像中。

COPY --chmod=755 entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]

这将导致您在撰写文件中传递的参数被传递到/bin/api,然后执行您的脚本。

我不确定这是否真的有用。 API 命令看起来像是在启动一个长时间运行的进程,因此您的脚本可能永远不会真正运行。

您也可以在入口点中制作类似的圆顶。

#!/bin/bash

run_script(){
  sleep 5
  source /script.sh
}

run_script &

exec /bin/api "$@"

它会隐藏该脚本中的错误,因此它并不真正可靠。

这将在后台运行该函数,该函数将休眠 5 秒以便为 API 提供启动时间,然后在 API 运行时运行脚本。

在不知道你的脚本在做什么的情况下,很难说什么是一个好的解决方案。第二个建议绝对感觉有点老套。

关于docker - 如何从 docker-compose 命令 : 运行 2 个不同的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71916469/

相关文章:

docker - 拉人工 docker 图像

go - 查询具有一种关系的正确方法

go - 单值上下文中的多值 ERROR

mysql - 应用程序和 MySQL Docker 容器通过 docker-compose 连接在一起。如何从我的应用程序使用 JDBC url 连接到 MySQL 容器数据库?

amazon-web-services - AWS ECS Docker 容器 Boto3 IAM 权限

docker - 我想在容器中打印 docker run 环境变量

node.js - 使用 npm global install angular-cli 构建 Docker 的时间很长

golang deepEqual interface{} 到整数

Docker,运行多个容器(elasticsearch)

docker容器之间的连接