- 容器的網頁要讓所有人存取,必須指定 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
- 啟動設定檔 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
- 本例子 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
- 使用 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
- 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
- 從外部主機 (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>
- 使用 centos/httpd image 建立名為 dtest8 的容器,指定 host 192.168.122.107 80 連接埠映射到容器到 80 port,建立後查連接埠,試著以 curl -s 連線容器 dtest8,並將結果導向到 /root/dtest8.curl。