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
相关产品推荐
相关产品推荐

