Meg*_*hna 16 compatibility docker docker-compose
我的 docker-compose.yml 包含以下内容:
version: '3.2'
services:
mysql:
image: mysql:latest
container_name: mysql
restart: always
network_mode: "host"
hostname: localhost
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
volumes:
- $HOME/data/datasql:/var/lib/mysql
ports:
- 3306:3306
user-management-service:
build: user-management-service/
container_name: user-management-service
restart: always
depends_on:
- mysql
- rabbitmq
- eureka
network_mode: "host"
hostname: localhost
ports:
- 8089:8089
Run Code Online (Sandbox Code Playgroud)
当我尝试执行 docker-compose up 时,出现以下错误:
"host" network_mode is incompatible with port_bindings
Run Code Online (Sandbox Code Playgroud)
谁能帮我解决问题?
Dav*_*aze 18
network_mode: host几乎没有必要。对于简单的服务器,例如您展示的 MySQL 服务器或看起来像普通 HTTP 应用程序的东西,使用普通(桥接)Docker 网络就足够了,ports:就像您展示的那样。
如果您确实设置了主机网络,则会完全禁用 Docker 的网络堆栈。您无法使用主机名调用其他容器,也无法使用重新映射容器的端口ports:(或选择根本不发布它)。
您应该删除文件network_mode:中显示的行docker-compose.yml。和行也是不必要的,您container_name:也hostname:可以删除它们(特定例外:RabbitMQ 需要修复hostname:)。
我觉得我看到主机网络被认可的两个地方要么是回调到主机(请参阅从 Docker 容器内部,如何连接到机器的本地主机?),要么是因为应用程序代码很难- 编码localhost为数据库或其他组件的主机名(在这种情况下,Docker 和非 Docker 开发设置的行为从根本上不同,您应该使用环境变量或其他机制配置这些位置)。
快速解决方案:
降级 docker-compose 版本就可以了。问题出在最新的 docker-compose 版本上,network_mode: "host"
我在 v1.29.2 上遇到了同样的问题,而在 v1.27.4 上一切都运行顺利。
| 归档时间: |
|
| 查看次数: |
39979 次 |
| 最近记录: |