我正在创建一个 docker-compose 文件,以便能够通过我的计算机上的 IP 访问不同的容器。我的 Docker 撰写文件如下:
version: '3.7'
services:
apache-php8:
build: ./apache-php8
volumes:
- ../webphp8:/var/www/html/web
ports:
- 80:80
networks:
web_net:
ipv4_address: 192.168.100.4
mysql:
image: mysql:5.7
restart: always
volumes:
- ../data:/var/lib/mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: test
MYSQL_USER: test
MYSQL_PASSWORD: test
networks:
web_net:
ipv4_address: 192.168.100.3
networks:
web_net:
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "false"
ipam:
driver: default
config:
- subnet: 192.168.100.0/24
gateway: 192.168.100.1
我希望能够访问 192.168.100.4 上机器上的代码,因为这是我为服务器定义的 IP,但是,我只能在 0.0.0.0 IP 中访问它。我在 Ubuntu 主机上,如果这很重要的话。
你知道这是为什么吗?我需要做什么才能访问 192.168.100.4 上的服务器?
当您在 docker compose 文件中定义端口时,例如:
ports:
- 80:80
它将容器的端口 80 绑定到所有可用接口上主机的端口 80,通常包括
127.0.0.1
(本地主机)和 0.0.0.0
(本地计算机上的所有 IP 地址)。
这就是为什么您可以通过
0.0.0.0
或 localhost
访问您的服务。
但是,docker 并不直接将容器 IP 绑定到主机系统。通过
ipv4_adresses
在 docker compose 文件中分配的 IP 地址是内部的。到 docker 桥接网络(在本例中为 web_net
),并且不直接暴露于主机网络接口。
如果您确实想在主机上使用
192.168.100.4
访问容器,您可以执行以下操作:
/etc/hosts
文件添加一个条目,将 192.168.100.4
映射回 localhost
。