Docker 网络,从 windows 主机连接到 linux 容器
Docker networking, connecting to linux container from windows host
我不确定为什么 运行 linux 基于 windows 10 主机上的容器时,我无法通过容器的 IP 地址访问,而如果 运行 windows 个容器我可以。
linux
的示例
networks:
team_net:
ipam:
driver: default
config:
- subnet: 172.28.1.0/26
services:
sql:
image: mcr.microsoft.com/mssql/server:latest
networks:
team_net:
ipv4_address: 172.28.1.11
environment:
- ACCEPT_EULA: Y
- SA_PASSWORD: My_password123
volumes:
- "mssql:/var/opt"
restart: unless-stopped
volumes:
mssql:
正在连接到服务器:172.28.1.11,1433,将拒绝连接。
此外,如果未设置并检查 运行 容器,我可以看到分配给它的 IP 地址,但再次尝试使用它会失败。
我不是网络人,但想知道是否可以直接使用分配给容器的 IP 地址,然后使用公开的端口进行连接。如果不可能,那是为什么?
这是explicitly noted in the Docker Desktop documentation。当您无法直接访问 container-private IP 地址时,还有多种其他情况:在 MacOS 主机上;如果您使用 Docker 工具箱或其他 VM-based 解决方案;如果您不在同一台物理主机上。由于这适用于很少的环境,因此直接使用 container-private IP 地址通常不是最佳做法。
尽管如此,无论平台如何,它都可以为您的服务指定 ports:
,然后使用主机的 IP 地址访问那些已发布的端口(localhost
来自容器外的同一主机; VM 的 IP 地址(如果您使用的是 Docker 工具箱)。您几乎永远不需要问题中显示的手动 IP 配置。
version: '3.8'
# Compose provides a "default" network; just use that
services:
sql:
image: mcr.microsoft.com/mssql/server:latest
# Compose provides
# networks: [default]
# But to make the container accessible
ports:
- '1433:1433' # second port _must_ be 1433, first can be anything
environment:
- ACCEPT_EULA: Y
- SA_PASSWORD: My_password123
volumes:
- "mssql:/var/opt"
restart: unless-stopped
volumes:
mssql:
使用此配置,您可以访问 localhost
和端口 1433(或者,如果您更改了第一个 ports:
号码,则为备用端口)。
我不确定为什么 运行 linux 基于 windows 10 主机上的容器时,我无法通过容器的 IP 地址访问,而如果 运行 windows 个容器我可以。
linux
的示例networks:
team_net:
ipam:
driver: default
config:
- subnet: 172.28.1.0/26
services:
sql:
image: mcr.microsoft.com/mssql/server:latest
networks:
team_net:
ipv4_address: 172.28.1.11
environment:
- ACCEPT_EULA: Y
- SA_PASSWORD: My_password123
volumes:
- "mssql:/var/opt"
restart: unless-stopped
volumes:
mssql:
正在连接到服务器:172.28.1.11,1433,将拒绝连接。
此外,如果未设置并检查 运行 容器,我可以看到分配给它的 IP 地址,但再次尝试使用它会失败。
我不是网络人,但想知道是否可以直接使用分配给容器的 IP 地址,然后使用公开的端口进行连接。如果不可能,那是为什么?
这是explicitly noted in the Docker Desktop documentation。当您无法直接访问 container-private IP 地址时,还有多种其他情况:在 MacOS 主机上;如果您使用 Docker 工具箱或其他 VM-based 解决方案;如果您不在同一台物理主机上。由于这适用于很少的环境,因此直接使用 container-private IP 地址通常不是最佳做法。
尽管如此,无论平台如何,它都可以为您的服务指定 ports:
,然后使用主机的 IP 地址访问那些已发布的端口(localhost
来自容器外的同一主机; VM 的 IP 地址(如果您使用的是 Docker 工具箱)。您几乎永远不需要问题中显示的手动 IP 配置。
version: '3.8'
# Compose provides a "default" network; just use that
services:
sql:
image: mcr.microsoft.com/mssql/server:latest
# Compose provides
# networks: [default]
# But to make the container accessible
ports:
- '1433:1433' # second port _must_ be 1433, first can be anything
environment:
- ACCEPT_EULA: Y
- SA_PASSWORD: My_password123
volumes:
- "mssql:/var/opt"
restart: unless-stopped
volumes:
mssql:
使用此配置,您可以访问 localhost
和端口 1433(或者,如果您更改了第一个 ports:
号码,则为备用端口)。