Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

docker deploy won't publish port in swarm

I've got a swarm set up with a two nodes, one manager and one worker. I'd like to have a port published in the swarm so I can access my applications and I wonder how I achieve this.

version: '2'
services:
  server:
    build: .
    image: my-hub.company.com/application/server:latest
    ports:
      - "80:80"

This exposes port 80 when I run docker-compose up and it works just fine, however when I run a bundled deploy

docker deploy my-service

This won't publish the port, so it just says 80/tcp in docker ps, instead of pointing on a port. Maybe this is because I need to attach a load balancer or run some fancy command or maybe add another layer of config to actually expose this port in a multi-host swarm.

Can someone help me understand what I need to configure/do to make this expose a port.

My best case scenario would be that port 80 is exposed, and if I access it from different hostnames it will send me to different applications.

Update: It seems to work if I run the following commands after deploying the application

docker service update -p 80:80 my-service_server
docker kill <my-service_server id>

I found this repository for running a HA proxy, it seems great and is supported by docker themselves, however I cannot seem to apply this separate to my services using the new swarm mode.

https://github.com/docker/dockercloud-haproxy

There's a nice description in the bottom describing how the network should look:

Internet -> HAProxy -> Service_A -> Container A

However I cannot find a way to link services through the docker service create command, optimally now looks like a way to set up a network, and when I apply this network on a service it will pick it up in the HAProxy.

-- Marcus

like image 640
Oldek Avatar asked Jul 01 '16 09:07

Oldek


3 Answers

As far as I understood for the moment you just can publish ports updating the service later the creation, like this:

docker service update my-service --publish-add 80:80
like image 153
sebbalex Avatar answered Oct 07 '22 19:10

sebbalex


Swarm mode publishes ports in a different way. It won't show up in docker ps because it's not publishing the port on the host, it publishes the port to all nodes so that takes it can load balancing between service replicas.

You should see the port from docker service inspect my-service.

Any other service should be able to connect to my-service:80

like image 30
dnephin Avatar answered Oct 07 '22 18:10

dnephin


docker service ls will display the port mappings.

like image 1
Florian Klein Avatar answered Oct 07 '22 19:10

Florian Klein