Using the host network with docker-compose
While host
is listed in docker network ls
it works very differently from other networks.
By default each container is isolated in its own separate network namespace. When a container is put in the "host" network (using network_mode: host
with compose), the container simply stays in the host's network namespace.
A container cannot be in a bridge network (like test
) and also be in the host
network at the same time as that would require this container to simultaneously be both in the host's network namespace and have its own separate network namespace.
Juicy
Updated on July 26, 2022Comments
-
Juicy almost 2 years
I'm trying to set up a container with two networks with
docker-compose
. I would like one of those networks to be thehost
network (ie: as if I was runningdocker run --net=host
) and the other a user-defined network.I tried this:
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"
I'm getting this error:
$ 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.