2016-04-20 9 views
5

Mam aplikację, która ma wiele kontenerów. do łatwej instalacji, postanawiam użyć obrazu opakowania. czego oczekiwałem jest jak poniżejBłąd przy "dokowaniu-komponowaniu", gdy używam potoku z sh (echo "dokowanie-komponowanie ..." | sh)

$ docker run my_application install | sh 

-> ciągnąć wszystkie podobne obrazy z rejestru

$ docker run my_application up | sh 

-> zrobić wstępną pracę i całą kontenerów

ale jestem z stucked poniżej problem.

$ 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 

błąd wywołany z okna dokowanego. podczas próby jak poniżej, to działa dobrze.

$ 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 

ale kiedy używać rurę z docker-komponować zawsze umieścić błąd.

Czy ktoś ma pojęcie, jak sobie z tym poradzić?

+0

Mam ten sam problem, gdy potokiem 'Döcker-compose' wyjście poprzez gzip do pliku. Kiedy uruchamiam polecenie w Bash, działa dobrze. Jednak jako zadanie cron otrzymuję ten sam błąd, co Ty - i ten sam plik śledzenia stosu i numery linii i nazwy funkcji, jak ty, i kod powrotu -1. Oto polecenie:/usr/local/bin/docker-compose exec postgres pg_dumpall --username = postgres | gzip> $ postgres_backup_path' (Mam tę linię w skrypcie kopii zapasowej, który uruchamiam czasem ręcznie (działa dobrze), a czasami jako zadanie cron (nie działa)). – KajMagnus

+1

Pracowałem nad moim problemem, dzwoniąc do Dockera bezpośrednio w ten sposób: '/ usr/bin/docker exec edm_postgres_1 pg_dumpall --username = postgres | gzip> $ postgres_backup_path' - działa dobrze zarówno z Cronu, jak i ręcznie w Bashu. – KajMagnus

Odpowiedz

8

To jest open bug w oknie dokowanym.

Jako obejście, można przejść do opcji -Tdocker-compose exec:

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