如何在Docker swarm Stack中命名/别名网络

时间:2017-09-11 03:49:23

标签: docker-compose docker-stack

我想在docker-swarm堆栈文件中为我的网络添加一个别名。

目前,堆栈文件看起来像

version: '3'

networks:
  mybridge:

services:
  web:
    restart: always
    build: ./web
    image: shivanand3939/web
    expose:
      - "8000"
    volumes:
      - ./output:/usr/src/app/static
    command: /usr/local/bin/gunicorn -w 2 -b :8000 --access-logfile - classifierv2RestEndPoint_ridge_NB:create_app()   
    networks:
      mybridge:
        aliases:
          - web
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  nginx:
    restart: always
    build: ./nginx/
    image: shivanand3939/nginx
    ports:
      - "80:80"
    volumes:
      - /www/static
    networks:
      - mybridge
    deploy:
      replicas: 1
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  viz:
    image: dockersamples/visualizer
    ports:
      - 8080:8080/tcp
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    deploy:
      placement:
        constraints: [node.role == manager]

我运行此文件时

docker stack deploy -c docker-stack.yml classifierbot

我得到以下输出

Creating network classifierbot_default
Creating network classifierbot_mybridge
Creating service classifierbot_viz
Creating service classifierbot_web
Creating service classifierbot_nginx

网络名称已从 mybridge 更改为 classifierbot_mybridge 。因此,2服务nginx和web无法在它们之间进行通信。

所以,我的问题是如何为我的网络提供别名也可以称为mybridge

编辑:

一种方法是添加

networks:
  mybridge:
    external:
      name: mybridge

并在堆栈文件之外创建mybridge,但它失败了目的吗?因为我无法在单个堆栈文件中执行所有操作

1 个答案:

答案 0 :(得分:0)

我假设网络是“别名”,您的意思是“为服务提供别名”。因为您的网络别名已成功给出。在您的情况下,为“ mybridge”。

为服务提供网络别名(我们通常将其称为域名)通常应该能够在您的服务中做到这一点:阻止

 nginx:
    networks:
      mybridge:
        aliases: # https://github.com/moby/moby/issues/38066
          - nginx

这是由于截至2019年10月27日尚未解决的错误。为此提供了一些可用的票证:

现在,我使用docker service来执行此操作,直到它得到多服务变体docker stack up|deploy的支持为止。

--hostname $SERVICE_NAME
--name $SERVICE_NAME