我想从docker compose为我的服务运行两个不同的命令.

  1. bash脚本.嘘
  2. config/etc/config.亚马尔

目前,我的docker compose如下所示.我希望bash脚本在config命令之后运行

docker compose .亚马尔:

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"]

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

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

你也可以在你的入口点做这样的圆顶.

#!/bin/bash

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

run_script &

exec /bin/api "$@"

不过,它会隐藏脚本中的错误,所以它不是真正可靠的.

这将在后台运行该函数,该函数将Hibernate 5秒以给API提供启动时间,然后在API运行时运行脚本.

如果不知道脚本在做什么,很难说什么是好的解决方案.第二个建议让人觉得有点老套.

Go相关问答推荐

Kafka消费者在需要时不会暂停

在Go中根据命名空间/字符串生成UUID

Go中的net.SplitHostPort(r.RemoteAddr)安全性

Docker Compose Health Check未退出,错误为无法启动

未实现的 desc = 未知服务 pb.AuthService 我的简单身份验证服务器上出现错误

当我使用 CircleCI 构建 Go Image 时,我得到runtime/cgo: pthread_create failed: Operation not allowed

使用Dockertest进行Golang SQL单元测试的基本设置

我无法使用反向代理更改主机标头

具有两个参数的动态规划:天数和优惠券

具有嵌套重复的正则表达式

枚举的 Golang 验证器自定义验证规则

获取切片元素的地址是否意味着 Go 中元素的副本?

无法使用 Golang 扫描文件路径

grpc-gateway:重定向与定义不匹配(原始文件)

Golang并发写入多个文件

同时调用应该只获取一次数据

传递上下文的最佳方式

退格字符在围棋操场中不起作用

为什么在 goroutine 中声明时,benbjohnson/clock 模拟计时器不执行?

在 VSCode 中使用命令行参数调试 Go 测试