You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose多行命令仅识别首个单词问题求助

Docker Compose 执行多行命令的正确配置

问题原因

你遇到的问题是YAML语法与Docker的entrypoint/command参数传递逻辑不匹配导致的:当entrypoint使用**数组形式(exec模式)**时,command的内容会被拆分成多个独立参数传递给sh -c,最终只有第一个单词apk被当作sh -c的命令参数,后续的add --no-cache curl变成了shell的额外参数,而非命令的一部分。

解决方案

以下几种配置方式都能解决这个问题:

方案1:将command作为单个字符串参数(数组形式)

把完整命令放在数组的单个元素里,确保sh -c收到完整的命令字符串:

services:
  foo:
    image: alpine:edge
    entrypoint: ["/bin/sh", "-c"]
    command: ["apk add --no-cache curl"]

方案2:使用YAML竖线(|)保留换行(适合多行命令)

如果需要执行多条命令,用|可以保留换行符,同时将整个内容作为单个字符串传递:

services:
  foo:
    image: alpine:edge
    entrypoint: ["/bin/sh", "-c"]
    command: |
      apk add --no-cache curl
      echo "curl安装完成"
      curl --version

方案3:合并entrypoint和command(更简洁)

直接在command里指定sh -c和完整命令,无需单独配置entrypoint:

services:
  foo:
    image: alpine:edge
    command: /bin/sh -c "apk add --no-cache curl"

验证

运行docker compose up后,容器会正确执行apk add命令,不会再出现apk的用法提示。

内容的提问来源于stack exchange,提问作者z11i

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 23:40:12