Docker网络,从Windows主机连接到linux容器

时间:2020-11-03 21:46:41

标签: docker networking docker-networking

我不确定为什么在Windows 10主机上运行基于linux的容器时,我无法通过容器的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地址,然后使用暴露的端口进行连接。如果不可能,那为什么呢?

1 个答案:

答案 0 :(得分:1)

这是explicitly noted in the Docker Desktop documentation。在许多其他情况下,您无法直接访问容器专用的IP地址:在MacOS主机上;如果您使用的是Docker Toolbox或其他基于VM的解决方案;如果您不在同一台物理主机上。由于这仅适用于很少的环境,因此通常不建议直接使用容器专用IP地址。

但是,不管使用哪种平台,它都可以为您的服务指定ports:,然后使用主机的IP地址(localhost从容器外部的同一主机; VM的IP访问那些已发布的端口)地址(如果您使用的是Docker Toolbox)。您几乎永远不需要问题中显示的手动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:号,则是该备用端口)。