1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<code>[root@localhost ~]</code><code># docker images</code>
<code>REPOSITORY TAG IMAGE ID CREATED SIZE</code>
<code>centos7 7.3.1611 d5ebea14da54 2 weeks ago 311 MB</code>
<code><none> <none> d5c154b612c8 2 weeks ago 311 MB</code>
<code>test</code> <code>latest ecefde07358f 11 weeks ago 599.6 MB</code>
<code>learn</code><code>/ping</code> <code>latest fea07d84b0df 4 months ago 196.7 MB</code>
<code>docker.io</code><code>/tomcat</code> <code>latest ebb17717bed4 4 months ago 355.4 MB</code>
<code>docker.io</code><code>/centos</code> <code>latest 980e0e4c79ec 6 months ago 196.7 MB</code>
<code>nginx 1.9 c8c29d842c09 9 months ago 182.7 MB</code>
<code>docker.io</code><code>/redis</code> <code>2.8.19 dd9fe7db5236 22 months ago 110.7 MB</code>
<code> </code>
<code>[root@localhost ~]</code><code># docker run -i -t centos7:7.3.1611 /bin/bash</code>
<code>[root@a3c8baf6961e /]</code><code># cat /etc/redhat-release</code>
<code>CentOS Linux release 7.3.1611 (Core)</code>
<code>[root@a3c8baf6961e /]</code><code># yum install wget vim</code>
<code>[root@a3c8baf6961e /]</code><code># wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo</code>
<code>安裝</code><code>ssh</code><code>服務端</code>
<code>[root@a3c8baf6961e /]</code><code># yum cleal all</code>
<code>[root@a3c8baf6961e /]</code><code># yum install passwd</code>
<code>[root@a3c8baf6961e /]</code><code># yum install openssh-server</code>
<code>修改容器密碼(提前yum -y reinstall cracklib-dicts)</code>
<code>[root@a3c8baf6961e /]</code><code># echo "123456" |passwd --stdin root</code>
<code>産生公私鑰</code>
<code>[root@a3c8baf6961e /]</code><code># ssh-keygen -t rsa //一路回車</code>
<code>[root@a3c8baf6961e /]</code><code># cd ~/.ssh/</code>
<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code># ls</code>
<code>id_rsa id_rsa.pub</code>
<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code># cp id_rsa.pub authorized_keys</code>
<code>authorized_keys id_rsa id_rsa.pub</code>
<code>執行sshd指令,有報錯:</code>
<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code># /usr/sbin/sshd</code>
<code>Could not load host key: </code><code>/etc/ssh/ssh_host_rsa_key</code>
<code>Could not load host key: </code><code>/etc/ssh/ssh_host_dsa_key</code>
<code>Could not load host key: </code><code>/etc/ssh/ssh_host_ecdsa_key</code>
<code>Could not load host key: </code><code>/etc/ssh/ssh_host_ed25519_key</code>
<code>解決辦法:</code>
<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code># ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key //均是一路回車</code>
<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code># ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key</code>
<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code># ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key</code>
<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code># ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key</code>
<code>再次執行sshd指令,如果沒有報錯,說明可以啟動了</code>
<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code>#</code>
<code>-----------------------啟動</code><code>ssh</code><code>,如果報錯如下(這是centos7下的一個bug)-------------------------</code>
<code>[root@a3c8baf6961e .</code><code>ssh</code><code>]</code><code># systemctl restart sshd.service</code>
<code>Failed to get D-Bus connection: Operation not permitted</code>
<code>這個報錯在之前的文檔裡就已經提到過了</code>
<code>解決辦法如下:</code>
<code>先把上面的容器關閉(docker stop container-</code><code>id</code><code>),然後重新啟動容器,啟動時加上參數--privileged(特權參數,也可以是--privileged=</code><code>true</code><code>,如果啟動容器中挂載目錄沒有權限也可以添加此參數)和</code><code>/sbin/init</code><code>(代替</code><code>/bin/bash</code><code>),如下:</code>
<code>[root@localhost ~]</code><code># docker run --privileged -i -t centos7:7.3.1611 /sbin/init </code>
<code>上面的容器啟動後,會一直在卡着的狀态中,先不用管,打開另一個終端視窗,檢視容器</code>
<code>[root@localhost ~]</code><code># docker ps</code>
<code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code>
<code>af40bd07fa0f centos7:7.3.1611 </code><code>"/sbin/init"</code> <code>28 seconds ago Up 28 seconds nauseous_shirley</code>
<code>然後按照容器的ID進去,這個時候再根據</code><code>/bin/bash</code><code>進入容器(前面加</code><code>exec</code> <code>-it參數),接着重新開機</code><code>ssh</code><code>服務就ok了</code>
<code>[root@localhost ~]</code><code># docker exec -it af40bd07fa0f /bin/bash</code>
<code>[root@af40bd07fa0f /]</code><code># systemctl restart sshd.service</code>
<code>[root@af40bd07fa0f /]</code><code># echo "123456" |passwd --stdin root //注意這裡由于上述特殊情況重新啟動了容器,之前建立的root密碼無效了(這就相當于重新另起了一個容器),需要重新修改下root密碼!!可以随便建立個使用者,然後切換到root,測試下之前建立的root密碼是否還有效!</code>
<code>--------------------------------------------------------------------------------------------------</code>
<code>檢視</code><code>ssh</code><code>端口,發現22端口已經開啟</code>
<code>[root@af40bd07fa0f /]</code><code># ss -a|grep ssh</code>
<code>tcp LISTEN 0 128 *:</code><code>ssh</code> <code>*:* </code>
<code>tcp LISTEN 0 128 :::</code><code>ssh</code> <code>:::* </code>
<code>[root@af40bd07fa0f /]</code><code># ss -ln|grep 22</code>
<code>u_dgr UNCONN 0 0 * 26884224 * 26885412 </code>
<code>tcp LISTEN 0 128 *:22 *:* </code>
<code>tcp LISTEN 0 128 :::22 :::* </code>
然後docker ps檢視下容器,送出更改為新鏡像,運作新的鏡像
<code>af40bd07fa0f centos7:7.3.1611 </code><code>"/sbin/init"</code> <code>21 minutes ago Up 21 minutes nauseous_shirley</code>
<code>記住這個容器ID,然後關閉</code>
<code>[root@localhost ~]</code><code># docker stop af40bd07fa0f</code>
<code>af40bd07fa0f</code>
<code>接着送出改為新的鏡像,使用上一步的容器ID,送出名為wangssh的鏡像(送出成功後,之前建立的容器可以選擇删除(docker </code><code>ps</code> <code>-a 檢視);當然不删除也不影響。建議不要删除,可以再次啟用送出新的鏡像以便他用。)</code>
<code>[root@localhost ~]</code><code># docker commit af40bd07fa0f wangssh</code>
<code>sha256:ca5e393b7605949e58c1067c1bc73d99d52f47107756f0ade1725ca04886fd71</code>
<code>[root@localhost ~]</code><code>#</code>
<code>送出成功後,使用docker images可以檢視到</code>
<code>wangssh latest ca5e393b7605 57 seconds ago 327.1 MB</code>
<code>然後運作新的鏡像</code>
<code>[root@localhost ~]</code><code># docker run -d -p 220:22 wangssh /usr/sbin/sshd -D</code>
<code>b0a845a3dedeac7b46002d1c8514077309d88dcc0667b7080bc1ab67d70eb167</code>
<code>docker: Error response from daemon: Cannot start container b0a845a3dedeac7b46002d1c8514077309d88dcc0667b7080bc1ab67d70eb167: [9] System error: SELinux policy denies access..</code>
<code>如上出現上面的報錯,這是由于selinux造成的!需要關閉selinux,如下:</code>
<code>[root@localhost ~]</code><code># setenforce 0</code>
<code>[root@localhost ~]</code><code># getenforce</code>
<code>Permissive</code>
<code>然後再次運作新的鏡像,就成功了!</code>
<code>0a7c1406361ef52dcc5c32801e4c7c231078594cd7010375ea33fe3024cc9126</code>
<code>上面運作指令中的參數解釋:</code>
<code>-d 背景運作容器</code>
<code>-p 容器端口映射到主機[可選]</code>
<code>使用docker </code><code>ps</code><code>檢視運作的容器</code>
<code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code>
<code>0a7c1406361e wangssh </code><code>"/usr/sbin/sshd -D"</code> <code>About a minute ago Up About a minute 0.0.0.0:220->22</code><code>/tcp</code> <code>focused_hawking</code>
<code>此時你可以直接連接配接容器,也可以通過端口映射連接配接容器(使用之前建立的容器密碼123456登陸)</code>
<code>[root@localhost ~]</code><code># ssh -p220 root@localhost</code>
<code>root@localhost's password:</code>
<code>[root@0a7c1406361e ~]</code><code>#</code>
------------------------------------------------------------------------------------------------------------------
如果要想做ssh無密碼登陸的信任關系,隻需要将實體機本地的~/.ssh/id_rsa.pub拷貝到容器裡的~/.ssh/authorized_keys即可
<code>接着上面ID為aea267757cc9的容器登陸後的操作:</code>
<code>[root@localhost ~]</code><code># docker exec -it aea267757cc9 /bin/bash</code>
<code>[root@aea267757cc9 /]</code><code># ssh-keygen -t rsa //一路回車</code>
<code>将實體機本地的~/.</code><code>ssh</code><code>/id_rsa</code><code>.pub拷貝到容器裡</code>
<code>[root@localhost ~]</code><code># docker cp ~/.ssh/id_rsa.pub aea267757cc9:/root/.ssh/</code>
<code>然後到容器裡将id_rsa.pub拷貝為authorized_keys</code>
<code>[root@aea267757cc9 /]</code><code># cd ~</code>
<code>[root@aea267757cc9 ~]</code><code># cd .ssh/</code>
<code>[root@aea267757cc9 .</code><code>ssh</code><code>]</code><code># cp id_rsa.pub authorized_keys</code>
<code>接着送出為新鏡像</code>
<code>aea267757cc9 centos7:7.3.1611 </code><code>"/sbin/init"</code> <code>About an hour ago Up 38 minutes admiring_hodgkin</code>
<code>fc726a6a27d2 centos </code><code>"/bin/bash"</code> <code>3 months ago Up 3 months 0.0.0.0:32772->80</code><code>/tcp</code> <code>web1</code>
<code>9d99c7b9451b centos </code><code>"/bin/bash"</code> <code>3 months ago Up 3 months 0.0.0.0:32769->8080</code><code>/tcp</code> <code>web3</code>
<code>[root@localhost ~]</code><code># docker stop aea267757cc9</code>
<code>aea267757cc9</code>
<code>[root@localhost ~]</code><code># docker commit aea267757cc9 hahassh</code>
<code>sha256:906bf1bd2a156b1222def7d3d21fbc2cd7e963fc923f5a6da92e6b45954688d9</code>
<code>[root@localhost ~]</code><code># docker run -d -p 220:22 hahassh /usr/sbin/sshd -D</code>
<code>8b9c153463c73122cfd787a27190a8665f54fe77fa51601d521baab5a9234f2e</code>
<code>最後嘗試</code><code>ssh</code><code>方式連接配接容器,發現可以無密碼登陸了~</code>
<code>Last login: Mon Mar 13 10:03:54 2017</code>
---------------------------------------------------------------------------------------------------------------------
當登陸到容器後,可以檢視下容器ip
<code>第一種方式:</code>
<code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code>
<code>b220fabf815a wangssh </code><code>"/usr/sbin/sshd -D"</code> <code>6 hours ago Up About an hour 0.0.0.0:20020->22</code><code>/tcp</code> <code>gigantic_goldwasser</code>
<code>fc726a6a27d2 980e0e4c79ec </code><code>"/bin/bash"</code> <code>3 months ago Up About an hour 0.0.0.0:32768->80</code><code>/tcp</code> <code>web1</code>
<code>9d99c7b9451b 980e0e4c79ec </code><code>"/bin/bash"</code> <code>3 months ago Up About an hour 0.0.0.0:32769->8080</code><code>/tcp</code> <code>web3</code>
<code>[root@localhost ~]</code><code># docker inspect b220fabf815a |grep IPAddress</code>
<code> </code><code>"SecondaryIPAddresses"</code><code>: null,</code>
<code> </code><code>"IPAddress"</code><code>: </code><code>"172.17.0.2"</code><code>,</code>
<code> </code><code>"IPAddress"</code><code>: </code><code>"172.17.0.2"</code><code>,</code>
<code>第二種方式:</code>
<code>[root@localhost ~]</code><code># docker inspect --format='{{.NetworkSettings.IPAddress}}' b220fabf815a</code>
<code>172.17.0.2</code>
<code>第三種方式:</code>
<code>登陸到容器裡使用“yum </code><code>install</code> <code>net-tools”,安裝後就可以使用</code><code>ifconfig</code><code>指令檢視ip了 </code>
<code>當知道了容器的ip後,就可以使用</code><code>ssh</code><code>直接連接配接容器的22端口即可!</code>
<code>[root@localhost ~]</code><code># ssh 172.17.0.2</code>
<code>[email protected]'s password:</code>
<code>Last login: Tue Mar 14 09:11:27 2017 from 172.17.0.1</code>
<code>[root@b220fabf815a ~]</code><code>#</code>
***************當你發現自己的才華撐不起野心時,就請安靜下來學習吧***************
本文轉自散盡浮華部落格園部落格,原文連結:http://www.cnblogs.com/kevingrace/p/6526990.html,如需轉載請自行聯系原作者