我正在尝试使用docker-compose
建立一个具有两个网络的容器。我希望其中一个网络是host
网络(即:好像我在运行docker run --net=host
),另一个是用户定义的网络。
我尝试过:
version: '3'
networks:
test:
driver: bridge
host:
external: true
services:
helloworld:
image: python:3.6-alpine
networks:
- test
- host
cap_add:
- NET_ADMIN
- NET_RAW
ports:
- 0.0.0.0:8080:8080
command: sh -c "cd /tmp && python -m http.server 8080"
我收到此错误:
$ docker-compose up
Removing blah_helloworld_1
Starting 8743618e8af4_blah_helloworld_1 ... error
ERROR: for 8743618e8af4_blah_helloworld_1 network-scoped alias is supported only for containers in user defined networks
ERROR: for helloworld network-scoped alias is supported only for containers in user defined networks
ERROR: Encountered errors while bringing up the project.
答案 0 :(得分:1)
虽然 host
列在 docker network ls
中,但它的工作方式与其他网络非常不同。
默认情况下,每个容器都被隔离在自己独立的网络命名空间中。当一个容器被放入“主机”网络时(使用 network_mode: host
和 compose),容器只是停留在主机的网络命名空间中。
容器不能在桥接网络(如 test
)中,也不能同时在 host
网络中,因为这将要求该容器同时位于主机的网络命名空间和有自己独立的网络命名空间。
答案 1 :(得分:0)
根据docs:
示例:
ports:
- target: 8080
published: 8080
protocol: tcp
mode: host