用ssh連接docker容器


用docker commit 的方式創建ssh直連docker容器鏡像

  1. 拉取鏡像,這里采用centos:7作為基礎鏡像
docker pull centos:7
  1. 運行鏡像,生成容器
docker run -d --name ssh_box --privileged=true centos:7 /usr/sbin/init
07228ec257564c4874ca24216d651bda65573d49e4149064a079cacca27de4e1 # 生成的容器ID

--name 給新生成的容器命名
--privileged=true 給容器訪問Linux內核特權,后面要訪問systemctl
返回一串容器ID表示容器生成成功

  1. 進入剛剛生成的容器
docker exec -it 07228ec25756 /bin/bash
  1. 進入容器后,使用passwd密碼來修改密碼(如提示沒有這個命令行使用yum install passwd安裝)
passwd

5.安裝vim和Openssh(docker 容器中執行)

yum install vim openssh-server openssh-clients -y

6.修改SSH配置文件

 vim /etc/ssh/sshd_config

修改如下:

PubkeyAuthentication yes #啟用公鑰私鑰配對認證方式 
AuthorizedKeysFile .ssh/authorized_keys #公鑰文件路徑(和上面生成的文件同) 
PermitRootLogin yes #root能使用ssh登錄
ClientAliveInterval 60  #參數數值是秒 , 是指超時時間
ClientAliveCountMax 3 #設置允許超時的次數
  1. 重啟ssh服務,並設置開機啟動
 systemctl restart sshd.service
 systemctl enable sshd.service

Failed to get D-Bus connection: Operation not permitted
這里如果報這個錯誤說明容器權限不足,第2步執行有誤
8.退出容器並保存更改

exit
  1. 用剛才生成的容器創建鏡像
 docker commit -m 'openssh' -a 'Docker for ssh' ffe81683c404 ssh_box

-m:來指定提交的說明信息,跟我們使用的版本控制工具一樣
-a 可以指定更新的用戶信息
ffe81683c404: 創建鏡像的容器的ID,就是上面的容器id,也就是我們剛才進入的容器id
ssh_box: 目標鏡像的倉庫名

docker images可以查看到新生成的鏡像

10.刪除構建容器(可選)
我們用centos基礎容器修改配置后已經生成了所需要的鏡像,之前的構建容器就可以刪除了

docker stop 07228ec25756
docker rm 07228ec25756
  1. 用新生成的鏡像啟動新的容器並打通22端口
docker run -d -p 2222:22 ssh_box /usr/sbin/sshd -D

12.然后可以使用xshell連接新生成的容器

ip: 為宿主主機的ip,而不是docker容器的ip
端口:就是上面的2222
用戶名: root
密碼: 就是上面password部分設置的密碼
在mac上可通過ssh root@127.0.0.1 -p:2222 登錄新生成的容器

至此ssh連接docker容器連接成功

以Dockerfile的方式創建ssh直連docker容器

  1. 創建Dockerfile文件
#生成的新鏡像以centos7鏡像為基礎
FROM centos:7
MAINTAINER by jesse (jesse152@163.com)
#升級系統
RUN yum -y update
#安裝openssh-server
RUN yum -y install openssh-server
#修改/etc/ssh/sshd_config
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config

# 生成sshkey
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

#變更root密碼
RUN echo "root:jesse131978"|chpasswd
#開放窗口的22端口
EXPOSE 22
#運行腳本,啟動sshd服務
CMD    ["/usr/sbin/sshd", "-D"]

2.在dockerfile文件同級目錄中運行創建命令

docker build -t centos7_ssh .

命令成功后,就會創建一個名字為centos7_ssh的image,可以使用“docker images”來查看
3. 根據鏡像創建容器

docker run -d -P --name=ssh_box centos7_ssh
  1. 查看容器ip
docker inspect ssh_box

5.查看端口

docker port ssh_box 22

知道ip和端口后就可以通過ssh建立連接了

遠程Dockerfile

我將Dockerfile文件上傳至github,可通過命令直接用github上的Dockerfile

docker build -t linux git@github.com:Jesse121/mylinux.git
參考文章
  1. Docker容器使用問題:Failed to get D-Bus connection: Operation not permitted
  2. ssh 直接登錄docker容器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM