docker容器需要訪問主機的,不能使用127.0.0.1,127.0.0.1訪問的是docker容器不是主機;
docker容器創建時會分配一個主機ip,可在主機使用命令 docker inspect 9f025896a9ec 查看容器的相關信息;其中的 "Gateway" 對應的ip地址,就是主機的ip地址,訪問主機的服務應該使用這個地址來訪問;
需要注意的是,主機開啟了防火牆的,要把訪問的端口打開,不然容器是無法訪問主機的。
舉個栗子:現在我在容器中安裝了一個nginx,容器ID為9f025896a9ec,然后反向代理到主機的8080端口。
- 先在主機使用命令
docker inspect 9f025896a9ec
打印容器的信息,
找到"Gateway"對應的為容器中對應主機的ip【這里假設為:172.1.0.1】,
找到"IPAddress"對應的容器的ip【172.1.0.2】; - 進入容器
docker exec -it 9f025896a9ec /bin/bash
; - 在容器中配置nginx.conf,反向代理的地址設置為 http://172.1.0.1:8080;
- 退出容器exit,在主機上重啟容器中的nginx:
docker restart 9f025896a9ec
; - 開放端口8080給容器
firewall-cmd --permanent --add-rich-rule 'rule family=ipv4 source address=172.1.0.2 port port=8080 protocol=tcp accept'
- 重載防火牆
firewall-cmd --reload
;