docker-compose不能使用私有IP

我试图在docker-compose中运行2个容器。 我的docker-compose.yml是:

version: '2' services: consul: image: "consul:0.8.3" hostname: "consul" command: "agent -server -client=0.0.0.0 -retry-join=10.30.1.97 -retry-join=10.30.1.42 -bootstrap-expect=3 -ui" ports: - "8400:8400" - "8500:8500" - "8300:8300" - "8600:53/udp" vault: depends_on: - consul image: "vault" hostname: "vault" links: - "consul:consul" environment: VAULT_ADDR: http://127.0.0.1:8200 ports: - "8200:8200" volumes: - ./tools/wait-for-it.sh:/wait-for-it.sh - ./config/vault:/config - ./config/vault/policies:/policies entrypoint: /wait-for-it.sh -t 20 -h consul -p 8500 -s -- vault server -config=/config/with-consul.hcl 

我刚开始的问题是,consul容器没有使用IP 10.30.1.134(主机的IP)而是使用我认为的桥梁networking:

 2017/07/10 10:09:12 [INFO] raft: Node at 172.18.0.2:8300 [Follower] entering Follower state (Leader: "") 

我如何强迫它使用10.30.1.134?

eth0 Link encap:Ethernet HWaddr 06:f5:74:4c:ad:9e
inet addr:10.30.1.134 Bcast:10.30.1.255掩码:255.255.255.0 inet6 addr:fe80 :: 4f5:74ff:fe4c:ad9e / 64适用范围:链路UP BROADCAST RUNNING MULTICAST MTU:9001度量:1 RX数据包:9907809错误: 0丢包:0超限:0帧:0 TX包:17142864错误:0丢包:0超限:0载波:0冲突:0 txqueuelen:1000 RX字节:1328463684(1.3 GB)TX字节:2178517759(2.1 GB)

默认情况下,Docker会在Docker环境中创build自己的networking。 所以,回答你的问题 – 使用主机networking,你应该使用:

 network_mode: "host" 

如下所述: https : //docs.docker.com/compose/compose-file/compose-file-v2/

但是这实际上很less是你真正需要的东西。 您定义的端口映射已经在主机和容器之间创build了端口转发。 例如,host_machine_ip:8200将被转发到您的保pipe库容器。 这样你就可以决定哪个端口特别暴露。