如何SSH进入Docker?

我想创build以下基础架构stream程:

如何使用Docker来实现?

首先,您需要在您希望使用的映像中安装SSH服务器。 您可以使用安装了ssh服务器的所有容器的基础映像。 然后,您只需使用-p <hostPort>:<containerPort>将每个将ssh端口(默认为22)映射到主机的端口(映像中的远程服务器)的-p <hostPort>:<containerPort> 。 即:

 docker run -p 52022:22 container1 docker run -p 53022:22 container2 

然后,如果主机的端口52022和53022可以从外部访问,则可以使用指定ssh中的端口的主机(远程服务器)的ip用-p <port>直接ssh到容器。 即:

ssh -p 52022 myuser@RemoteServer – > SSH到container1

ssh -p 53022 myuser@RemoteServer – > SSH到container2

这些文件将成功打开sshd并运行服务,以便您可以在本地ssh。 (你正在使用networking呃不是吗?)

Dockerfile

 FROM swiftdocker/swift MAINTAINER Nobody RUN apt-get update && apt-get -y install openssh-server supervisor RUN mkdir /var/run/sshd RUN echo 'root:password' | chpasswd RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config # SSH login fix. Otherwise user is kicked off after login RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd ENV NOTVISIBLE "in users profile" RUN echo "export VISIBLE=now" >> /etc/profile COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf EXPOSE 22 CMD ["/usr/bin/supervisord"] 

supervisord.conf

 [supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D 

构build/运行启动守护进程/跳转到shell。

 docker build -t swift3-ssh . docker run -p 2222:22 -i -t swift3-ssh docker ps # find container id docker exec -i -t <containerid> /bin/bash 

我想这是可能的。 您只需要在每个容器中安装一个SSH服务器,并在主机上显示一个端口。 主要的烦恼是维护/记住港口到集装箱的映射。

但是,我不得不质疑你为什么要这样做。 SSH'ng到容器应该是非常罕见的,ssh到主机不是一个麻烦,然后使用docker exec进入容器。

注意 :这个答案提供了一个我写的工具。

这里select的答案build议在每个映像中安装一个SSH服务器。 从概念上讲,这不是正确的方法( https://docs.docker.com/articles/dockerfile_best-practices/ )。

我创build了一个容器化的SSH服务器,可以“粘”到任何正在运行的容器。 这样你可以创build每个容器的作品。 唯一的要求是容器有bash。

以下示例将启动附加到名称为“sshd-web-server1”的容器的SSH服务器。

 $ docker run -d -p 2222:22 \ -v /var/run/docker.sock:/var/run/docker.sock \ -e CONTAINER=my-container -e AUTH_MECHANISM=noAuth \ jeroenpeeters/docker-ssh $ ssh -p 2222 localhost 

有关更多指针和文档,请参阅: https : //github.com/jeroenpeeters/docker-ssh

这不仅打败了每个容器一个进程的想法,而且在使用来自Docker Hub的图像时也是一个繁琐的方法,因为他们通常不会(也不应该)包含SSH服务器。