Nhược điểm của việc sử dụng docker exec
là nó đòi hỏi một chạy container, nên docker inspect -f
có thể thuận tiện nếu bạn không chắc chắn một container đang chạy.
Ví dụ số 1. Output một danh sách các biến môi trường không gian tách ra trong container quy định:
docker inspect -f \
'{{range $index, $value := .Config.Env}}{{$value}} {{end}}' container_name
đầu ra sẽ trông như thế này:
ENV_VAR1=value1 ENV_VAR2=value2 ENV_VAR3=value3
Ví dụ # 2. Output mỗi env var trên dòng mới và grep
các mục cần thiết, ví dụ, cài đặt các thùng chứa mysql của thể được lấy ra như thế này:
docker inspect -f \
'{{range $index, $value := .Config.Env}}{{println $value}}{{end}}' \
container_name | grep MYSQL_
chí đầu ra:
MYSQL_PASSWORD=secret
MYSQL_ROOT_PASSWORD=supersecret
MYSQL_USER=demo
MYSQL_DATABASE=demodb
MYSQL_MAJOR=5.5
MYSQL_VERSION=5.5.52
Ví dụ # 3. Hãy thay đổi ví dụ trên để có được một bash thân thiện đầu ra có thể được sử dụng trực tiếp trong kịch bản của bạn:
docker inspect -f \
'{{range $index, $value := .Config.Env}}export {{$value}}{{println}}{{end}}' \
container_name | grep MYSQL
chí đầu ra:
export MYSQL_PASSWORD=secret
export MYSQL_ROOT_PASSWORD=supersecret
export MYSQL_USER=demo
export MYSQL_DATABASE=demodb
export MYSQL_MAJOR=5.5
export MYSQL_VERSION=5.5.52
Nếu bạn muốn tìm hiểu sâu hơn, sau đó đi đến Tài liệu gói text/template của Go với tất cả các chi tiết của định dạng.
Có lý do nào không muốn sử dụng env và grep không? – aisbaa
Tôi chỉ cần giá trị. Nếu tôi hiểu chính xác, tôi cần phân tích đầu ra của cuộc gọi grep, và tôi muốn tránh điều đó. – Citronen
Tôi đã nghĩ biến đã được thiết lập trong một phiên exec không ảnh hưởng đến quá trình chính hoặc phiên exec tiếp theo? –