2016-04-20 23 views
5

Tôi là một ứng dụng có nhiều vùng chứa. để dễ dàng cài đặt, tôi quyết định sử dụng hình ảnh đóng gói. những gì tôi mong đợi là như dưới đâyLỗi trên "docker-compose" khi tôi sử dụng đường ống với sh (echo "docker-compose ..." | sh)

$ docker run my_application install | sh 

-> kéo tất cả các hình ảnh có liên quan từ registry

$ docker run my_application up | sh 

-> làm một số công việc ban đầu và tất cả các container

Nhưng tôi stucked với dưới vấn đề.

$ 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 

lỗi được tăng lên từ trình tạo bản đồ đế. khi cố gắng như dưới đây, nó hoạt động tốt.

$ 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 

nhưng khi tôi sử dụng đường ống với docker-compose nó luôn đặt lỗi.

Có ai có ý tưởng nào về cách tôi có thể xử lý việc này không?

+0

Tôi đang gặp vấn đề tương tự, khi đường ống 'đầu ra Docker-compose' qua gzip vào một tập tin. Khi tôi tự chạy lệnh trong Bash, nó hoạt động tốt. Tuy nhiên, như một công việc cron, tôi nhận được cùng một lỗi như bạn - và cùng một tập tin dấu vết ngăn xếp & số dòng & tên chức năng, như bạn, và trả về mã -1. Đây là lệnh: '/ usr/local/bin/docker-compose exec postgres pg_dumpall --username = postgres | gzip> $ postgres_backup_path' (Tôi có dòng đó trong một kịch bản sao lưu mà tôi chạy đôi khi bằng tay (hoạt động tốt) và đôi khi như một công việc cron (sẽ không hoạt động)). – KajMagnus

+1

Tôi đã làm việc xung quanh vấn đề của tôi bằng cách gọi Docker trực tiếp như vậy: '/ usr/bin/docker exec edm_postgres_1 pg_dumpall --username = postgres | gzip> $ postgres_backup_path' - hoạt động tốt từ cả Cron và thủ công trong Bash. – KajMagnus

Trả lời

8

Đây là một số open bug trong bộ docker-compose.

Là một khắc phục, bạn có thể vượt qua các tùy chọn -T để docker-compose exec:

$ docker-compose exec --help 
[...] 
-T    Disable pseudo-tty allocation. By default `docker-compose exec` 
        allocates a TTY. 
Các vấn đề liên quan