參考:
https://www.cnblogs.com/chenqionghe/p/9988566.html
https://blog.csdn.net/qq_36850813/article/details/90081562
建議采用Dockerfile文件的方式來新建具備SSH的鏡像
(1) 創(chuàng)建一個Dockerfile文件
vim Dockerfile
在某個目錄下創(chuàng)建一個Dockerfile文件,然后輸入如下內(nèi)容并保存?;诋斍扮R像添加SSH功能。
# 生成的新鏡像以nvidia/cuda:10.1-cudnn7-devel-centos7-mmdet-env鏡像為基礎(chǔ)
FROM nvidia/cuda:10.1-cudnn7-devel-centos7-mmdet-env
MAINTAINER by C.J. Sun
# 安裝openssh-server 修改root密碼為88888888
RUN yum install -y passwd && \
yum install -y openssh-server ssh-keygen && \
echo '88888888' | passwd root --stdin
#創(chuàng)建ssh-keygen創(chuàng)建相關(guān)的ssh文件,-q的意思是靜默模式(就是默認是需要讓你回車輸入的,加上這個直接跳過)
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N "" -q && \
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N "" -q && \
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" -q
#RUN systemctl enable sshd
# 開啟sshd服務(wù),并用tail來前臺執(zhí)行阻止docker容器退出
CMD /usr/sbin/sshd && tail -f /var/log/wtmp
(2) 重新創(chuàng)建鏡像
Dockerfile目錄下執(zhí)行如下,例如
docker build -t nvidia-cuda:centos_ssh .
其中nvidia-cuda:centos_ssh為新的鏡像。注意最后面的點不要忘了,表明是讀取當前目錄的Dockerfile文件。
創(chuàng)建成功的話會出現(xiàn)下面的提示,可能時間會有點長,耐心等待。
Successfully built 2d548392b205
(3) 基于新建鏡像運行容器
docker run --name centos_ssh -p 2222:22 -it nvidia-cuda:centos_ssh
后臺啟動一個容器,將該容器名稱設(shè)置為:centos_ssh,將容器端口22映射到宿主機端口2222。
(4) 宿主服務(wù)器ssh訪問測試
ssh root@127.0.0.1 -p 2222
root@127.0.0.1's password:
Last login: Tue Nov 20 04:10:17 2018 from 172.17.0.1
這里使用了2222端口來映射容器里的22端口,運行起來就可以使用ssh連接了,輸出設(shè)置好的88888888密碼,注意,這里用的是2222映射的端口。
(5) 遠程ssh訪問宿主服務(wù)器并實現(xiàn)docker的訪問
遠程通過xshell或者MobaXterm實現(xiàn)訪問,訪問host設(shè)置為宿主服務(wù)器的ip,端口設(shè)置為容器22在宿主機的映射端口即可,如上述例子中設(shè)置為2222。
(6) 對于新鏡像重新啟動容器
如果啟動出現(xiàn)問題,建議使用
docker run --gpus all --name centos_mmdet_ssh -itd -p 2222:22 --privileged=true nvidia/cuda:centos-mmdet-env-ssh /usr/sbin/init
備注: sshd重啟命令
如果連接出現(xiàn)問題可以對sshd進行重啟
Redirecting to /bin/systemctl restart ssh.service
Failed to restart ssh.service: Unit not found.
service ssh restart是centos 6的命令。centos 7的命令應(yīng)該是:
systemctl restart sshd