使docker使用具有两个以太网端口的主机中的特定networking接口(通过名称或IP)

编辑:我相信这个问题只是相对于docker工人,我仍然给予traefik细节,以防万一它在未来的帮助。

我正在尝试在有两个以太网端口的机器上configurationtraefik。

由于我想将端口80暴露给外部,当我尝试启动容器时出现错误:

错误:对于traefik_traefik_1无法启动服务traefik:驱动程序失败编程端点上的外部连接traefik_traefik_1(68247b1a5d9c26bfb0a139747f210140c4cf4a34d9125b2cc2fb5d968c85a89b):启动userland代理时出错:listen tcp 0.0.0.0:80:bind:address already already in use

但80端口只在eth0(ip:192.168.1.11)接口中使用。

如何使docker(和traefik,如果需要的话)使用eth1(ip:192.168.1.12)接口的80端口不使用?

这是我docker-compose.yml

 version: "2" services: traefik: image: traefik networks: - proxy ports: - 80:80 - 443:443 - 8888:8888 volumes: - /var/run/docker.sock:/var/run/docker.sock - ${SERVER_DIR}/docker/traefik:/etc/traefik/ - ${PWD}/acme.json:/acme.json - ${PWD}/traefik.toml:/traefik.toml - ${PWD}/servers.toml:/servers.toml restart: never networks: proxy: external: true 

而我的traefik.toml

 logLevel = "ERROR" defaultEntryPoints = ["http", "https"] [entryPoints] [entryPoints.http] address = "192.168.1.12:80" compress = false [entryPoints.http.redirect] entryPoint = "https" [entryPoints.https] address = "192.168.1.12:443" [entryPoints.https.tls] [acme] email = "email@mail.com" storage = "acme.json" entryPoint = "https" onHostRule = true #onDemand = true [[acme.domains]] main = "mydomain.net" [web] address = "192.168.1.12:8888" [docker] endpoint = "unix:///var/run/docker.sock" domain = "mydomain.net" watch = true exposedbydefault = false 

而我正在创buildproxynetworking接口: docker create network proxy

将您的端口绑定到特定的主机IP地址。 代替:

 ports: - 80:80 - 443:443 - 8888:8888 

使用:

 ports: - "192.168.1.12:80:80" - "192.168.1.12:443:443" - "192.168.1.12:8888:8888" 

这与docker-run-p参数使用的语法相同。 详细信息请参阅文档 。

(请注意,引用( "..." )在这种情况下不是必须的,但YAML有时会对未加引号的数字执行意外的转换,所以我只是在默认情况下引用了这些东西。