指定 IP 及連接埠

  1. 容器的網頁要讓所有人存取,必須指定 public IP 映射到容器的 80 port。 host 必須開啟 net.ipv4,ip_forward,RHEL/CentOS 7 的設在檔在 /etc/sysctl.d 目錄下,在此目錄新增一個設定檔 01-ipforward.conf,設定 net.ipv4.ip_forward=1。
    [root@kvm7 ~]# vim /etc/sysctl.d/01-ipforward.conf
    [root@kvm7 ~]# cat /etc/sysctl.d/01-ipforward.conf
    net.ipv4.ip_forward=1
    
  2. 啟動設定檔 01-ipforward.conf 的設定,查詢結果 net.ipv4.ip_forward = 1。
    [root@kvm7 ~]# sysctl -p /etc/sysctl.d/01-ipforward.conf 
    net.ipv4.ip_forward = 1
    [root@kvm7 ~]# sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 1
    
  3. 本例子 docker host 為虛擬機,僅以 VM 的網段 192.168.122.0/24 示範,目前網卡 eth0 的 IP 是 192.168.122.7,先在此網卡新增一個 IP 192.168.122.107。
    [root@kvm7 ~]# ip addr add 192.168.122.107/24 dev eth0
    [root@kvm7 ~]# ip addr show dev eth0
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 52:54:00:c3:d8:fa brd ff:ff:ff:ff:ff:ff
        inet 192.168.122.7/24 brd 192.168.122.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet 192.168.122.107/24 scope global secondary eth0
           valid_lft forever preferred_lft forever
        inet6 2001:ac18::f80:b997:b5c7:d722/64 scope global dynamic 
           valid_lft 86345sec preferred_lft 14345sec
        inet6 fe80::72ab:4c63:ad44:a6e2/64 scope link 
           valid_lft forever preferred_lft forever
    
  4. 使用 centos/httpd image 建立名為 ipweb 的容器,讓 host 192.168.122.107:80 連到容器的 httpd 8080 port。
    [root@kvm7 ~]# docker run -dit --name ipweb -p 192.168.122.107:80:80 centos/httpd
    a18b169d712292289e9ab7eeb97f206b42a28c6b7809040e7248e0368d076766
    
  5. docker ps 查看執行程序。
    [root@kvm7 ~]# docker ps
    CONTAINER ID IMAGE        COMMAND         CREATED        STATUS       PORTS                      NAMES
    a18b169d7122 centos/httpd "/run-httpd.sh" 10 seconds ago Up 5 seconds 192.168.122.107:80->80/tcp ipweb
    
  6. 從外部主機 (VM 的 host) 使用 curl 連線 192.168.122.107,正常連線。
    [root@dyw219 ~]# curl -s http://192.168.122.107 | grep RHEL
                   the sources of Red Hat Enterprise Linux (RHEL).<p>
    
  7. 使用 centos/httpd image 建立名為 dtest8 的容器,指定 host 192.168.122.107 80 連接埠映射到容器到 80 port,建立後查連接埠,試著以 curl -s 連線容器 dtest8,並將結果導向到 /root/dtest8.curl。