2016-04-20 8 views
5

私は複数のコンテナを持つアプリケーションを持っています。簡単インストールに 、私は梱包イメージを使用することにしました。 私が期待するshでパイプを使用すると "docker-compose"エラーが発生する(echo "docker-compose ..." | sh)

$ docker run my_application install | sh 

以下のようなものです - >いくつかの初期の仕事をしてまでのすべてのコンテナ

のしかし、私はとstuckedだ - >レジストリ

$ 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 

エラーをドッカーから作成しました。 以下のようにしようとするとうまくいきます。

$ 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 

が、私はとのパイプを使用するときにドッキングウィンドウ-構成 それは常にエラーを置きます。

私はこれをどのように処理することができますか?

+0

を。 Bashでコマンドを自分で実行すると、うまく動作します。しかし、cronジョブとして、あなたと同じエラーが発生します。同じスタックトレースファイルと行番号と関数名、あなたと戻りコード-1。コマンドは次の通りです: '/ usr/local/bin/docker-compose exec postgres pg_dumpall --username = postgres | gzip> $ postgres_backup_path'(私は手動で(うまく動作する)、時にはcronジョブ(動作しないかもしれません)を実行するバックアップスクリプトにその行があります。 – KajMagnus

+1

私はDockerを直接次のように呼び出すことで問題を解決しました: '/ usr/bin/docker exec edm_postgres_1 pg_dumpall --username = postgres | gzip> $ postgres_backup_path' - CronとBashの両方でうまく動作します。 – KajMagnus

答えて

8

これは、ドッカー作成でopen bugです。回避策として

、あなたはdocker-compose exec-Tオプション渡すことができます。ファイルにはgzipを経て `ドッキングウィンドウ-compose`出力をパイプするとき、私は、同じ問題を抱えている

$ docker-compose exec --help 
[...] 
-T    Disable pseudo-tty allocation. By default `docker-compose exec` 
        allocates a TTY. 
関連する問題