Çalışan bir docker konteynerine ssh veya bash yapmak istiyorum. Lütfen örneğe bakın:
$ 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
Şimdi böyle bir şey almak istiyorum (çalışan konteynere git):
$ sudo docker run -t -i webserver (ya da belki 665b4a1e17b6 yerine) $ root@665b4a1e17b6:/#
Ancak yukarıdaki satırı çalıştırdığımda yeni KONTEYNER kimliği alıyorum:
$ root@42f1e37bd0e5:/#
Vagrant kullandım ve benzer bir davranış elde etmek istiyorum vagrant ssh.
Docker sürüm 1.3 veya üstü için: Kullanıcıya teşekkürler WiR3D bir konteynerin kabuğunu almak için başka bir yol önerdi. Eğer kullanırsak attach kabuğun yalnızca bir örneğini kullanabiliriz. Dolayısıyla, bir konteynerin kabuğunun yeni bir örneğiyle yeni bir terminal açmak istiyorsak, aşağıdakileri çalıştırmamız yeterlidir:
$ sudo docker exec -i -t 665b4a1e17b6 /bin/bash #by ID
Temel olarak, Docker konteyneri kullanılarak başlatılmışsa /bin/bash komutu kullanarak erişebilirsiniz attach. Değilse, kapsayıcı içinde bir Bash örneği oluşturmak için komutu çalıştırmanız gerekir exec.
Ayrıca, Bash'i haydut bir süreçte çalıştırmadan Bash'den çıkmak için:
Sorunun yazarı özellikle çalışan bir kapsayıcıyla ilgilendiklerini söylese de, kapsayıcı çalışmıyorsa, ancak etrafta dolaşmak için çalıştırmak istiyorsanız, çalıştırabileceğinizi de belirtmek gerekir:
Koymak docker-ssh dosyanızda $PATH aşağıdaki içeriklerle
#!/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
Not: Bazı kapsayıcılar içermiyor bash, ama ash, sh vb. Bu durumlarda bash yukarıdaki senaryoda değiştirilecektir.
Kullanma
Yalnızca bir çalışan örneğiniz varsa, çalıştırmanız yeterlidir
Çalışan herhangi bir konteynere SSH yetenekleri sağlayan konteynerli bir SSH sunucusu oluşturdum. Konteynerini değiştirmene gerek yok. Tek şart, kabın bash'a sahip olmasıdır.
'Web-server1' adlı bir kapsayıcınız varsa. Aşağıdaki docker run komutu, ilk kapsayıcı için SSH sağlayacak ikinci bir kapsayıcıyı başlatır.
Ayrıca Docker kapsayıcısına Pipework ile yönlendirilebilir bir IP adresi verebilir ve bundan sonra bu yeni IP adresiyle makineye SSH verebilirsiniz.
Bu, uygulamaya özel bir komut kullanmak yerine daha "geleneksel" (ssh) olacaktır docker attach ve sonunda sistemler ve sürümler arasında daha 'taşınabilir' hale getirecek.
Bazen, özellikle geliştirme sırasında bir Docker kapsayıcısına ssh yapabilmek kullanışlı olacaktır. Aşağıdaki Docker görüntüsü, özel bir anahtar kullanarak bir konteynere ssh yapılmasına izin verir: