我无法在docker-compose中运行以下内容(1.7 build 0d7bf73 ,撰写文件格式版本1),从命令行(docker 1.10.3)正常工作:
docker run --rm --entrypoint="/bin/bash" node:4 -c "node gridd.js -t | ./node_modules/bunyan/bin/bunyan"
我的码头组成:
grid:
image: node:4-slim
entrypoint: /bin/bash
command: -c "node gridd.js -t | ./node_modules/bunyan/bin/bunyan"
使用此docker-compose文件会导致
marcel@client ~/grid $ docker-compose -f ../docker-compose-test.yml -p test up
Removing test_grid_1
Recreating 4e0104efc149_4e0104efc149_4e0104efc149_test_grid_1
ERROR: for grid Container command not found or does not exist.
Attaching to
我也尝试使用exec方法,docker-compose命令作为列表,结果相同
答案 0 :(得分:0)
好的,这一定是docker-compose中的一个bug。一旦我将docker-compose.yml文件移动到当前目录并且不指定是否使用-f标志,一切正常:)
答案 1 :(得分:0)
在 2021 年,docker-compose
v2.0.0-beta.6:
command
字段的行为令人惊讶,如果涉及 |
或 &&
。
预期
我可以在命令中自由使用管道和&&
;它们会被倒入bash -c
。
我认为这是Docker的常态; command
字段的行为在将其作为字符串提供与作为数组提供之间有所不同。
实际
该命令似乎只是在 |
或 &&
处被切断,而忽略了尾部!!!
不好的是,这没有错误。此外,没有找到任何说明如何使用 command
内容的文档(在 Docker 中,有这样的文档)。
实验(如下)表明,如果我显式以 bash -c
开头命令,我可以在命令中使用 |
和 &&
。
注意:行为与语法版本 3.9(最新)相同。
version: '3.0'
services:
abc:
image: debian:latest
#command: 'echo a | grep -v a' # a (wrong)
#command: 'echo a | grep x' # a (wrong)
#
#command: bash -c 'echo a | grep -v a' # (empty) ?
#command: bash -c 'echo a | grep a' # a ?
command: bash -c 'echo a && false' # (exits with code 1) ?
测试:
docker-compose.yml
docker compose up
注意:对于稍长的命令,如果完整命令也被引用,则最终会执行引用转义技巧。因此,我没有引用 bash -c
。