docker - 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添加到每个容器配置中,但是这样我就失去了容器之间的通信。
解决方案
只需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"
仅添加到这些服务。
推荐阅读
- javascript - VueJS在单个文件中选择组件
- typescript - 有没有办法在 Firebase 中创建经过身份验证的用户 ID 之前更改它们。它们由 facebook 提供商创建
- flutter - 使用 Kotlin 开发 Flutter 插件与使用 Java 编写的插件有什么不同吗?
- python - 如何使用 dbo 在 SQLite 中配置函数。字首
- r - 使用 R 从 csv 生成 NetCDF
- arrays - 如何从另一个函数中检索c中的数组值
- sql - SQL 查询问题
- angular - Angular 单元测试 - 注入失败
- acumatica - Acumatica API - 库存转移的第二步(收据)
- arrays - 如何根据索引将 ruby 数组拆分为两个数组?