I understand that some discussion in docker issue #25873 saying this is supported in 17.06 ce. I have installed 17.09 in Linux and 18.03 in Windows. Both have the same problem complaining
network "host" is declared as external, but it is not in the right scope: "local" instead of "swarm"
Would like to know why I'm not able to use the host network with scope local ? Is there a way to use host network when running docker stack deploy ?
Client:
Version: 18.03.0-ce
API version: 1.37
Go version: go1.9.4
Git commit: 0520e24
Built: Wed Mar 21 23:06:28 2018
OS/Arch: windows/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.0-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.4
Git commit: 0520e24
Built: Wed Mar 21 23:14:32 2018
OS/Arch: linux/amd64
Experimental: false
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 1
Server Version: 18.03.0-ce
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: active
NodeID: cqa33vk220d3zpp9g2gqar9hd
Is Manager: true
ClusterID: cphphnyrr379dbm5044snxrjy
Managers: 1
Nodes: 1
Orchestration:
Task History Retention Limit: 5
Raft:
Snapshot Interval: 10000
Number of Old Snapshots to Retain: 0
Heartbeat Tick: 1
Election Tick: 3
Dispatcher:
Heartbeat Period: 5 seconds
CA Configuration:
Expiry Duration: 3 months
Force Rotate: 0
Autolock Managers: false
Root Rotation In Progress: false
Node Address: 192.168.65.3
Manager Addresses:
192.168.65.3:2377
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: cfd04396dc68220d1cecbe686a6cc3aa5ce3667c
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 4.9.87-linuxkit-aufs
Operating System: Docker for Windows
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.934GiB
Name: linuxkit-00155d006407
ID: YRXM:MKGD:7VQM:ZNK2:XKCI:DYTL:VVQH:XP5X:QRCY:CKP2:5EVJ:3QE4
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
File Descriptors: 33
Goroutines: 145
System Time: 2018-04-08T07:24:34.2713256Z
EventsListeners: 1
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
version: '3.4'
services:
test:
image: alpine
command: top
networks:
- host
networks:
host:
external:
name: host
C:\>docker stack deploy -c docker-compose.yml test
network "host" is declared as external, but it is not in the right scope: "local" instead of "swarm"
If you use the host network mode for a container, that container's network stack is not isolated from the Docker host (the container shares the host's networking namespace), and the container does not get its own IP-address allocated.
When running Docker Engine in swarm mode, you can use docker stack deploy to deploy a complete application stack to the swarm. The deploy command accepts a stack description in the form of a Compose file. The docker stack deploy command supports any Compose file of version “3.0” or above.
By default, when you create or run a container using docker create or docker run , it does not publish any of its ports to the outside world. To make a port available to services outside of Docker, or to Docker containers which are not connected to the container's network, use the --publish or -p flag.
Multi-host networking When deploying a Compose application on a Docker Engine with Swarm mode enabled, you can make use of the built-in overlay driver to enable multi-host communication.
As of November Docker 18.09 release, this should work on modern Linux the same as Windows Server 2019. You can connect one service to a host port directly as well as overlay networks.
To use a host NIC directly for a published port, you don't use networks, you just change the published port mode like so:
services:
traefik:
image: traefik:alpine
ports:
- target: 80
published: 80
protocol: tcp
mode: host
For normal published ports it would be mode: ingress
If you want the service to talk to overlay networks as well, you can add networks the usual way. I've got a full example of this for Traefik here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With