Docker-compose使用多行命令

文章展示了在DockerCompose文件中如何使用不同方法编写多行命令,包括使用`command`与`entrypoint`结合,以及如何实现命令的并行执行。提到了使用`$$`来转义美元符号,防止Compose的内插值,并给出了具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写法1
version: '3'
services:
  demo:
    entrypoint: ["echo","hello"]
    command: bash -c "command1 && command2 && command3"
多行写法2
version: '3'
services:
  demo:
    entrypoint: ["echo","hello"]
    # > 可选
    command: >
        bash -c "command1 &&
        command2 &&
        command3"
多行写法3
version: '3'
services:
  demo:
    entrypoint: ["echo","hello"]
    command:
      - /bin/bash
      - -c
      - |
        KAFKA_CLUSTER_ID=$$(/opt/bitnami/kafka/bin/kafka-storage.sh random-uuid)
        echo "$$KAFKA_CLUSTER_ID"
        /opt/bitnami/kafka/bin/kafka-storage.sh format -t "\$KAFKA_CLUSTER_ID" -c /opt/bitnami/kafka/config/kraft/server.properties
        /opt/bitnami/kafka/bin/kafka-server-start.sh /opt/bitnami/kafka/config/kraft/server.properties

Tips:
当您的配置需要文字美元符号时,可以使用 $$(双美元符号)进行转义。这还可以防止 Compose 内插值,因此 $$ 允许您引用不希望由 Compose 处理的环境变量
https://github.com/docker/compose/issues/4485

并行写法

最后一行不要,就是前面几个后台运行,最后一个直接运行

version: '3'
services:
  demo:
   
    command:
      - /bin/bash
      - -c
      - |
        command1 &
        command2 &
        command3

参考 :https://qastack.cn/programming/30063907/using-docker-compose-how-to-execute-multiple-commands

### 可能的原因分析 当 `docker compose -f docker/docker-compose.yml up -d` 命令执行后卡住不动,可能由以下几个因素引起: - **网络问题**:如果 Docker 尝试拉取远程镜像,则可能会因网络不稳定而造成延迟甚至挂起[^2]。 - **资源不足**:宿主机上的 CPU 或内存资源不足以支持容器启动,可能导致进程停滞。 - **日志输出过多**:某些应用在启动期间会产生大量日志信息,这些信息会被缓冲区阻塞直到刷新完成。 - **依赖项未准备好**:如果有其他服务作为前置条件,在它们尚未就绪之前当前服务无法继续初始化。 ### 解决方法 #### 方法一:增加超时时间并启用调试模式 通过设置合理的等待时间和开启详细的诊断记录来帮助定位具体位置。可以在命令后面加上参数 `--timeout 180 --verbose` 来延长默认的超时期限至三分钟,并打印更多内部操作细节以便排查问题所在。 ```bash docker compose -f docker/docker-compose.yml up -d --timeout 180 --verbose ``` #### 方法二:检查现有容器状态 有时旧有的僵尸态或退出状态的容器会影响新实例的成功创建。可以先清理掉所有停止了的服务单元后再重新部署整个项目结构。 ```bash docker rm $(docker ps -aq) ``` 此命令将会移除所有的已终止容器,从而减少潜在冲突的可能性。 #### 方法三:验证配置文件合法性 确保所使用的 `docker-compose.yml` 文件格式正确无误,特别是对于多行字符串定义部分要格外小心处理转义字符等问题。可以通过官方提供的在线工具或者其他方式提前校验文档语法的有效性[^3]。 #### 方法四:调整Docker Daemon 设置 适当调节后台守护程序的相关参数,例如增大交换分区大小、优化存储驱动器性能等措施有助于提高整体效率。编辑 `/etc/docker/daemon.json` 添加如下内容(视具体情况而定): ```json { "max-concurrent-downloads": 10, "storage-driver": "overlay2" } ``` 之后重启 Docker 服务使更改生效。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值