首页 > 解决方案 > Docker for Windows - 如何访问同一局域网上的外部主机

问题描述

Docker for Windows 新手在这里。

我需要其中一个容器来访问位于主机所在的同一 LAN ( 192.168.1.134 ) 的一台机器 ( 192.168.1.100 ) 中的 Web 服务器,但我不明白该怎么做。

容器通过 docker-compose 启动,配置如下:

version: '3.2'

services:
  myapp:
    image: 'docker.io/bitnami/codeigniter:latest'
    ports:
      - '8000:8000'
    volumes:
      - '.:/app'
    depends_on:
      - mariadb
  mariadb:
    volumes:
      - ./docker_data:/docker-entrypoint-initdb.d
    image: 'docker.io/bitnami/mariadb:10.3-debian-10'
    ports:
      - '3306:3306'
    environment:
      MARIADB_ROOT_PASSWORD: xxx
      MARIADB_DATABASE: xxx
      MARIADB_USER: xxx
     MARIADB_PASSWORD: xxx
  composer_installation:
    container_name: composer_installation
    image: composer
    volumes:
      - ./:/app
    command: composer install --ignore-platform-reqs  

容器可以相互 ping 通,并且容器内有出站/入站 Internet 连接,但我无法访问 LAN 中的 IP

我尝试通过添加来修改 docker-compose

--extra_hosts:
  - "myotherhost:192.68.1.134"

到“ myapp ”容器 - 我可以看到主机添加到/etc/hosts文件,但我没有出站连接。

我还尝试将network_mode: bridge添加到每个容器配置中,但是这样我就失去了容器之间的通信。

标签: dockerdocker-compose

解决方案


只需network_mode用作host

version: '3.2'

services:
  myapp:
    image: 'docker.io/bitnami/codeigniter:latest'
    volumes:
      - '.:/app'
    network_mode: "host"
    depends_on:
      - mariadb
  mariadb:
    volumes:
      - ./docker_data:/docker-entrypoint-initdb.d
    network_mode: "host"
    image: 'docker.io/bitnami/mariadb:10.3-debian-10'
    environment:
      MARIADB_ROOT_PASSWORD: xxx
      MARIADB_DATABASE: xxx
      MARIADB_USER: xxx
     MARIADB_PASSWORD: xxx
  composer_installation:
    container_name: composer_installation
    image: composer
    network_mode: "host"
    volumes:
      - ./:/app
    command: composer install --ignore-platform-reqs  

在这里,我假设所有三个容器都需要连接到同一个 LAN,如果它用于特定服务,则 network_mode: "host"仅添加到这些服务。


推荐阅读