Reputation: 7743
I am trying to execute a "docker-compose up" command. Please find below my docker-compose file. I tried with network_mode: "host" but it doesn't work. I am on Linux OS. request you to let me know if I am making any blunder.
version: '3.6'
services:
mongo:
image: "mongo:latest"
container_name: ohif-mongo
ports:
- "27017:27017"
viewer:
image: ohif/viewer:latest
container_name: ohif-viewer
ports:
- "3030:80"
network_mode: "host" # please make note of the alignment
links:
- mongo
environment:
- MONGO_URL=mongodb://mongo:27017/ohif
extra_hosts:
- "pacsIP:172.xx.xxx.xxx"
volumes:
- ./dockersupport-app.json:/app/app.json
after execution, I get the below error
ERROR: for 8f4c3de7e3a3_ohif-viewer Cannot create container for service viewer: conflicting options: host type networking can't be used with links. This would result in undefined behavior
ERROR: for viewer Cannot create container for service viewer: conflicting options: host type networking can't be used with links. This would result in undefined behavior
I don't know why the error message is displayed twice. Not sure whether this is expected
Second, when I change the alignment of network_mode: "host" (by 1/2 spaces)
ports:
- "3030:80"
network_mode: "host" # please see the change in alignment now
links:
- mongo
I get the below error message
ERROR: yaml.parser.ParserError: while parsing a block mapping
in "./docker-compose.yml", line 10, column 5
expected <block end>, but found '<block mapping start>'
in "./docker-compose.yml", line 14, column 6
How can I start the container with network=host mode?
Upvotes: 40
Views: 171414
Reputation: 970
A container can't be on both the host network and the bridge network, not by using links, nor by any other combination of properties. You have to explicitly pass traffic between the host and the internal bridge network.
To get from the host to the internal network, the host network can access ports exposed by internal containers. So, for instance, note the use of 'localhost' here:
services:
mongo:
image: "mongo:latest"
ports:
- "27017:27017"
viewer:
image: ohif/viewer:latest
network_mode: host
environment:
MONGO_URL: mongodb://localhost:27017/ohif
# no links required
To go the other direction, from internal to host, you have to make use of the 'host-gateway' special property.
services:
proxy-app:
image: proxy-app
network_mode: host
service-app:
image: service-app
extra_hosts:
- proxy-host:host-gateway
environment:
PROXY_URL: http://proxy-host
Upvotes: 5
Reputation: 396
network_mode: host
is used for sharing the same networking space with the Host. For example you can want to access an application that is running on your Linux PC from the container.
If you want to link services together, you can use links
, or depends_on
, and if the services are on different hosts just create an overlay network
Upvotes: 33
Reputation: 467
From docs:
network_mode: "host" cannot be mixed with links.
Warning: The --link flag is a legacy feature of Docker. It may eventually be removed. Unless you absolutely need to continue using it, we recommend that you use user-defined networks to facilitate communication between two containers instead of using --link. One feature that user-defined networks do not support that you can do with --link is sharing environmental variables between containers. However, you can use other mechanisms such as volumes to share environment variables between containers in a more controlled way.
Just remove the links. They are no longer required.
Upvotes: 9