shell 如何通过Docker compose执行多行命令?

kokeuurv  于 2023-10-23  发布在  Shell
关注(0)|答案(1)|浏览(161)

我想通过docker compose在我的docker容器中执行以下命令

cat <<EOT >> /config.toml
[[tls.certificates]]
  certFile = "/etc/letsencrypt/live/example.site/fullchain.pem"
  keyFile = "/etc/letsencrypt/live/example.site/privkey.pem"
EOT

下面是这个特定容器的基本Docker compose

container:
    image: container-image
    command:
      - --api=true
      - --dashboard=true

我想在这两个命令下面添加多行命令。如果是一个命令,我可以简单地使用
- sh -c "echo 'single line command'"但是在这个例子中我如何执行这个多行命令呢?

sqxo8psd

sqxo8psd1#

你不会在Compose文件中运行这样的命令。
请记住,容器只运行一个命令,然后退出。例如,这使得使用command:创建配置文件变得困难,因为这将是容器所做的唯一事情。对于这种设置,正如注解中所指出的,这甚至更加复杂,因为command:实际上是其他命令的参数列表。你可以对图像进行逆向工程,覆盖它的entrypoint:,但这很快就会变得非常复杂。
由于您只是尝试提供一个静态配置文件,因此应该在主机上创建它,并使用Compose volumes:通过绑定挂载注入它。看起来您正在尝试将内容附加到现有配置,因此您可能需要从提取现有配置开始。

docker create --name tmp container-image
docker cp tmp:/etc/letsencrypt/config.toml ./
docker rm tmp

$EDITOR config.toml  # and add the lines shown, on the host
version: '3.8'
services:
  container:
    image: container-image
    command:
      - --api=true
      - --dashboard=true
    volumes:                                       # <-- add if not present
      - ./config.toml:/etc/letsencrypt/config.toml # <-- add

相关问题