如何为docker-compose构建阶段指定--network=host构建选项?
如何在Docker Compose中指定构建阶段使用Host网络
嘿,这个问题我之前也碰到过!单独用docker build --network=host能搞定,但要整合到Compose里的话,只需要在服务的构建配置里加一行参数就行,具体操作如下:
1. 修改主目录的docker-compose.yml
打开你根目录下的docker-compose.yml,把原来的build: ./recognizer改成带网络配置的结构:
version: '3' services: recognizer: container_name: recognizer build: context: ./recognizer # 构建上下文还是指向recognizer目录 network: host # 关键配置!指定构建阶段使用host网络 hostname: recognizer restart: always ports: - 8084:8084 network_mode: "host"
2. (可选)修改子目录的docker-compose.yml
如果你有时候需要单独操作recognizer服务,也可以更新recognizer文件夹里的docker-compose.yml,同样加上构建网络配置:
services: recognizer: build: context: . network: host ports: - "8084:8084" network_mode: "host"
补充说明
要注意区分两个配置的作用:这里的network: host是镜像构建阶段的设置,和你已经添加的network_mode: host完全不同——前者让构建过程(比如Dockerfile里的nc测试、apt-get更新操作)使用宿主机网络,后者是控制容器运行时的网络模式。
改完之后,执行docker-compose build或者docker-compose up --build,构建recognizer镜像的时候就会自动使用host网络,这样你Dockerfile里的nc -w 2 -v localhost 5432命令就能正常访问宿主机的5432端口了。
内容的提问来源于stack exchange,提问作者Denis




