A relatively simple solution. According to the from-docker-container-sharpanswer-31328031" rel=" nofollow noreferrer "> stackoverflow answer , execute the following command in the container to display the current routing information. The" 172.17.0.1 "(this is this on my side, which may be different on your side) is the ip of the physical machine.
$ ip route show
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 src 172.17.0.4
then set the firewall on the physical machine
$ iptables -A INPUT -i docker0 -j ACCEPT
then you can use the 172.17.0.1 ip to connect to the physical machine in the container.
in addition, a better way to implement this is to build a bridge in docker-compose.yml:
version: '2'
services:
<container_name>:
image: <image_name>
networks:
- dockernet
networks:
dockernet:
driver: bridge
ipam:
config:
- subnet: 192.168.0.0/24
gateway: 192.168.0.1
then the ip of 192.168.0.1 is the physical machine ip.
In addition, this question has been argued for a long time in
issue . You can take a look at it.