【问题标题】:Docker networking, connecting to linux container from windows hostDocker 网络,从 windows 主机连接到 linux 容器
【发布时间】:2020-11-04 06:33:36
【问题描述】:

我不知道为什么在 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 地址,然后使用暴露的端口进行连接。如果不可能,为什么会这样?

【问题讨论】:

  • 为什么不使用端口部分来定义暴露的端口?

标签: docker networking docker-networking


【解决方案1】:

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

不过,无论平台如何,它都可以为您的服务指定 ports:,然后使用主机的 IP 地址访问那些已发布的端口(@98​​7654323@ 来自容器外部的同一主机;如果您使用虚拟机的 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: 编号,则可以访问该备用端口)。

【讨论】:

  • 不是我所希望的。不过谢谢你的回答。
猜你喜欢
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
  • 2018-01-09
相关资源
最近更新 更多