2017-04-14 17 views
9

Trong khi xây dựng một hình ảnh docker thông qua dockerfile, tôi phải sao chép một repo github. Tôi đã thêm các khóa ssh công khai vào tài khoản git hub của mình và tôi có thể sao chép repo từ máy chủ docker của mình. Trong khi tôi thấy rằng tôi có thể sử dụng khóa ssh của docker host bằng cách ánh xạ biến env $SSH_AUTH_SOCK tại thời điểm docker chạy như docker run --rm -it --name container_name \ -v $(dirname $SSH_AUTH_SOCK):$(dirname $SSH_AUTH_SOCK) \ -e SSH_AUTH_SOCK=$SSH_AUTH_SOCK my_image.Chuyển tiếp đại lý SSH trong khi docker build

Tôi có thể làm như thế nào trong khi xây dựng docker?

+2

Vì vậy, những gì bạn cần là sử dụng khóa riêng để làm 'git clone'? Có lẽ đây không phải là câu trả lời trực tiếp cho câu hỏi của bạn, nhưng tôi nghĩ rằng http://farazdagi.com/blog/2016/ssh-private-keys-on-docker-build/ có thể hữu ích. – shizhz

Trả lời

0

Thật không may, bạn không thể chuyển tiếp ổ cắm ssh của mình đến vùng chứa xây dựng vì các giá trị khối lượng thời gian xây dựng hiện không được hỗ trợ trong Docker.

Đây là một chủ đề của cuộc thảo luận khá lâu đây, gặp các vấn đề sau trên GitHub để tham khảo:

Như bạn có thể thấy tính năng này có được yêu cầu nhiều lần cho các trường hợp sử dụng khác nhau. Cho đến nay các nhà bảo trì đã do dự để giải quyết vấn đề này bởi vì họ cảm thấy rằng gắn kết khối lượng trong quá trình xây dựng sẽ phá vỡ tính di động:

kết quả của một xây dựng nên không phụ thuộc vào các máy chủ cơ bản

Như được nêu trong các cuộc thảo luận this.

0

Giải quyết. Tạo kịch bản bash (~/bin/Docker-soạn hoặc thích):

#!/bin/bash 

trap 'kill $(jobs -p)' EXIT 
socat TCP-LISTEN:56789,reuseaddr,fork UNIX-CLIENT:${SSH_AUTH_SOCK} & 

/usr/bin/docker-compose [email protected] 

Và trong Dockerfile sử dụng socat:

... 
ENV SSH_AUTH_SOCK /tmp/auth.sock 
... 
    && apk add --no-cache socat openssh \ 
    && /bin/sh -c "socat -v UNIX-LISTEN:${SSH_AUTH_SOCK},unlink-early,mode=777,fork TCP:172.22.1.11:56789 &> /dev/null &" \ 
    && bundle install \ 
... 
or any other ssh commands will works 

Sau đó chạy docker-compose build

Các vấn đề liên quan