几个月来我一直在思考这个问题,但就是找不到任何提到这个问题的例子或文档。
基本上我有一个 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