docker-compose使用管道命令

时间:2016-04-18 08:44:13

标签: pipe docker-compose

我无法在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命令作为列表,结果相同

2 个答案:

答案 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