错误“docker-compose”当我用pipe道使用sh(echo“docker-compose …”| sh)

我有一个多容器的应用程序。 为了便于安装,我决定使用包装图像。 我的预期是如下

$ docker run my_application install | sh 

– >从registry中拉出所有相关的图像

 $ docker run my_application up | sh 

– >做一些初步的工作和所有的容器

但我被困在下面的问题。

 $ echo "docker-compose exec cassandra cqlsh -e 'desc keyspaces'" | sh Traceback (most recent call last): File "<string>", line 3, in <module> File "compose/cli/main.py", line 57, in main File "compose/cli/main.py", line 108, in perform_command File "compose/cli/main.py", line 353, in exec_command File ".tox/py27/lib/python2.7/site-packages/dockerpty/pty.py", line 338, in start File ".tox/py27/lib/python2.7/site-packages/dockerpty/io.py", line 32, in set_blocking ValueError: file descriptor cannot be a negative integer (-1) docker-compose returned -1 

docker-compose引发的错误。 当试图像下面,它运作良好。

 $ echo "docker exec my_application_cassandra_1 cqlsh -e 'desc keyspaces'" | sh system_traces system $ sh -c "docker-compose exec cassandra cqlsh -e 'desc keyspaces'" system_traces system 

但是当我使用pipe道与docker – 撰写它总是把错误。

有人有任何想法我可以如何处理这个?

这是docker-compose中的一个开放的错误 。

作为解决方法,您可以将-T选项传递给docker-compose exec

 $ docker-compose exec --help [...] -T Disable pseudo-tty allocation. By default `docker-compose exec` allocates a TTY.