Tôi muốn ssh hoặc chui vào một chạy docker thùng chứa. Xin vui lòng, xem dụ:
$ sudo docker run -d webserverwebserver is clean image from ubuntu:14.04$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES665b4a1e17b6 webserver:latest /bin/bash ... ... 22/tcp, 80/tcp loving_heisenberg
Bây giờ tôi muốn có được một cái gì đó như thế này (đi vào chạy container):
$ sudo docker run -t -i webserver (hoặc có thể 665b4a1e17b6 thay vì) $ root@665b4a1e17b6:/#
Tuy nhiên, khi tôi chạy các đường phía trên tôi nhận được CHỨA mới ID:
$ root@42f1e37bd0e5:/#
Tôi sử dụng lang thang và tôi muốn có được một hành vi tương tự như vagrant ssh.
Cho Docker phiên bản 1.3 hay muộn: cảm Ơn để dùng WiR3D người đã đề nghị một cách khác để có được một container của vỏ. Nếu chúng ta sử dụng attach chúng tôi chỉ có thể sử dụng một trường hợp của vỏ. Vì vậy, nếu chúng ta muốn mở một nhà ga mới với một ví dụ mới của một container của vỏ trứng, chúng ta chỉ cần phải chạy như sau:
$ sudo docker exec -i -t 665b4a1e17b6 /bin/bash #by ID
Về cơ bản, nếu Docker container đã bắt đầu sử dụng những /bin/bash lệnh bạn có thể truy cập vào nó sử dụng attach. Nếu không, sau đó anh phải thực hiện lệnh để tạo ra một Bash dụ bên trong thùng sử dụng exec.
Cũng để thoát khỏi Bash mà không để lại Bash chạy trong một rogue quá trình:
Mặc dù các tác giả của câu hỏi cụ thể nói rằng họ rất quan tâm đến trong một container, nó cũng đáng chú ý là nếu container không chạy, nhưng bạn muốn chạy nó để chọc xung quanh bạn có thể chạy:
Dựa trên @, Được câu trả lời của tôi đã tạo ra những điều sau đây tiện kịch bản
Thiết lập
Đưa docker-ssh tập tin của bạn $PATH với các nội dung sau
#!/bin/bash -xe# docker container id or name might be given as a parameterCONTAINER=$1if [[ "$CONTAINER" == "" ]]; then # if no id given simply just connect to the first running container CONTAINER=$(docker ps | grep -Eo "^[0-9a-z]{8,}\b")fi# start an interactive bash inside the container# note some containers don't have bash, then try: ash (alpine), or simply sh# the -l at the end stands for login shell that reads profile files (read man)docker exec -i -t $CONTAINER bash -l
Chú ý: Một container không chứa bash nhưng ash, sh etc. Trong những trường hợp này bash sẽ được thay thế ở trên kịch bản.
Sử dụng
Nếu bạn chỉ có một trường hợp chạy, chỉ cần chạy
$> docker-ssh
Nếu không, cung cấp, nó với một docker id số mà bạn nhận được từ docker ps (đầu tiên col)
Tôi đã tạo ra một container SSH máy chủ cung cấp SSH khả năng để bất kỳ chạy thùng chứa. Bạn không cần phải thay đổi container của bạn. Yêu cầu duy nhất là container đã bash.
Nếu bạn có một container với tên 'web-server1'. Sau docker chạy lệnh sẽ bắt đầu một thứ hai thùng chứa đó sẽ cung cấp SSH cho container đầu tiên.
Bạn cũng có thể cung cấp cho các Docker chứa một routeable địa chỉ IP với đường Ống, và sau đó SSH vào máy đó mới địa chỉ IP.
Này, sẽ được nhiều hơn "truyền thống" (ssh), thay vì bằng cách sử dụng một dụng cụ thể ra lệnh như thế docker attach và cuối cùng sẽ làm cho nó thêm 'di động' qua hệ thống và một phiên bản.
Đôi khi nó sẽ có ích để có thể ssh vào một container Docker, đặc biệt là trong quá trình phát triển. Sau Docker hình ảnh cho phép để ssh vào một container sử dụng một khóa riêng: