我有一些docker conatiner,现在我想通过ssh访问一个。那是工作我通过ssh连接到docker容器。
但是现在我遇到了一个问题,我不知道我可以访问哪个用户进入这个容器?
我已经与主机上的两个用户(网络和根)一起尝试过。但他们没有工作。 怎么知道?
答案 0 :(得分:10)
您可以使用以下命令直接放入正在运行的容器中
$ docker exec -it myContainer /bin/bash
您可以在未运行的容器上获取shell:
$ docker run -it myContainer /bin/bash
这是在容器上获取shell的首选方法。运行SSH服务器被认为不是一种好的做法,虽然有一些用例,但应尽可能避免使用。
答案 1 :(得分:7)
如果要直接连接到Docker容器,而不连接到docker主机,则Dockerfile应包含以下内容:
# SSH login fix. Otherwise user is kicked off after login
RUN echo 'root:pass' | chpasswd
RUN mkdir /var/run/sshd
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
然后使用docker run -p和-d标志。例如:
docker run -p 8022:22 -d your-docker-image
您可以连接:
ssh root@your-host -p8022
答案 2 :(得分:-1)
更强大的解决方案是将nsenter下拉到您的服务器,然后从那里搜索并运行docker-enter
。这样你就不需要在容器中运行多个进程(ssh服务器+容器的用途),或者担心ssh用户的所有额外开销等(更不用说安全问题)。
答案 3 :(得分:-1)
容器背后的想法是,容器运行单个进程,以便守护程序可以对其进行监视。如果此过程停止||由于某种原因而失败,可以根据您在配置中的偏好重新启动它。 ssh服务器是一个正在运行的进程。因此,如果您需要通过ssh来访问安装程序,请制作一个ssh服务器服务,该服务可以与在安装程序中与其并排运行的其他容器共享卷。
要直接在主机中的容器上打开外壳,请执行以下操作:
假设您在家中的PC上,有一台运行docker并运行容器的远程计算机,并且想直接在容器上打开一个shell,而无需在远程主机上“停下来”:
(-t
标志公开了tty)
ssh -t user@remote.host 'docker exec -it running_container_name /bin/bash'
如果您已经在主机上,请接受以下答案: (-i交互式-t tty)
docker exec -it running_container_name /bin/bash