Docker-compose 多网络,具有 1 个静态 IP

Docker-compose 多网络,具有 1 个静态 IP

几个月来我一直在思考这个问题,但就是找不到任何提到这个问题的例子或文档。

基本上我有一个 docker-compose,可以在其中启动一堆容器和多个网络。

version: "3"

networks:
  vlan65:
    external: true
  traefik_bridge:
  mail_network:
    external: false

services:
  traefik:
    image: traefik:1.7-alpine
    container_name: traefik
    restart: ${RESTART_MODE}
    ports:
      - "80:80"
      - "443:443"
    labels:
      - traefik.enable=true
      - traefik.frontend.rule=Host:traefik.${MAILSERVER_DOMAIN}
      - traefik.port=8080
      - traefik.docker.network=mail_network
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ${VOLUMES_ROOT_PATH}/traefik/traefik.toml:/traefik.toml:ro
      - ${VOLUMES_ROOT_PATH}/traefik/acme:/etc/traefik/acme
    networks:
      vlan65:
        - ipv4_address: 10.0.8.2
      traefik_bridge: null
      mail_network: null

vlan65 被声明为外部的,并使用 docker macvlan 允许从外部进行 NAT 进入这个特定的 vlan 和容器。

问题是我还需要此容器中可用的 traefik_bridge 和 mail_networks,并且 vlan65 上的 IP 应该是静态的(10.0.8.2)。

但是使用这种语法我收到错误:

ERROR: The Compose file './docker-compose.yml' is invalid because:
services.traefik.networks.vlan65 contains an invalid type, it should be an object, or a null

我是否遗漏了一些明显的东西或者 macvlan 实现中是否存在问题?

答案1

只是一个 YAML 语法错误:

使用破折号

- ipv4_address: 10.0.8.2 

是单元素列表,而不是对象。不要使用破折号来获取普通对象:

    networks:
      vlan65:
        ipv4_address: 10.0.8.2
      traefik_bridge: null

相关内容