2015-03-15 39 views
5

Tôi đang gặp sự cố khi lưu trữ kết quả của docker run -it -d -p 43211:3000 --name appname -h hostname -v $PWD/local_dir:/root/remote_dir repo/imagename trong một biến thể BASH. Tôi đã thử `backticks`, tôi cũng đã thử chạy nó như tài liệu chính thức nói BASH_VAR=$(docker run ...), tôi thậm chí đã thử lưu trữ đầu ra trong một tệp với docker run --...>$FILE_DESCRIPTOR, nhưng không may mắn lưu trữ tình huống lỗi, tình huống khi tên đó đã được sử dụng bởi một vùng chứa khác, như vậy:Lưu trữ lệnh đầu ra `docker run` trong biến BASH

$ FATA[0000] Error response from daemon: Conflict. The name "appname" is already in use by container 7c84d8d703c8. You have to delete (or rename) that container to be able to reuse that name.

tôi muốn nói rằng nó hoạt động cho tình hình thành công, vì vậy tôi có thể lưu trữ trong BASH_VAR ID container đầy đủ, khi chạy ứng dụng thành công, nhưng tiếc là điều này giải quyết chỉ bằng một nửa vấn đề tôi đang gặp phải.

Mọi trợ giúp sẽ được đánh giá cao.

Cảm ơn!

+4

làm 'output = $ (Docker chạy -nó -d -p 43.211: 3000 - tên ứng dụng -h tên máy chủ -v $ PWD/local_dir:/root/remote_dir repo/imagename 2> & 1) 'làm việc cho bạn? '2> & 1' chuyển hướng stderr thành stdout. – hek2mgl

+0

Cảm ơn bạn, loại sir! Vâng, @ kek2mgl, nó hoạt động như một sự quyến rũ! Lý do tôi cần điều này là vì tôi đang xây dựng một kịch bản lệnh bash quản lý vùng chứa docker tương tác, với [Hộp thoại] (http://linux.die.net/man/1/dialog) và tôi cần phân tích cú pháp đầu ra của tất cả các lệnh Tôi phát hành đằng sau hậu trường. Bạn có thể trả lời câu hỏi để tôi có thể đánh dấu nhận xét của bạn là câu trả lời đúng. –

+0

Tôi có tập lệnh bash như thế này '#!/Usr/bin/bash kết quả = $ (docker run -e' SITE = WL '-h pingnet - tên pingnet --rm pingnet 2> & 1) echo $ {result } 'và không hiển thị bất kỳ kết quả – irom

Trả lời

0

Bạn có thể sử dụng vòng lặp while để đọc từng dòng đầu ra khi nó được tạo ra và thực hiện điều gì đó theo cách đó.

while read -r line_of_output; do 
    echo "line: $line_of_output" 

done < <(docker ... 2>&1) 

Ngoài ra, nếu bạn đang viết một kịch bản tương tác, bạn có thể muốn kiểm tra select bash BUILTIN

$ help select 
select: select NAME [in WORDS ... ;] do COMMANDS; done 
    Select words from a list and execute commands. 
Các vấn đề liên quan