coreos docker-compose v2:在防火墙之后过滤的暴露端口,无法访问

我发现Docker-compose和docker之间的networking端口展示存在一个奇怪的行为,我的意思是我不能用docker-compose

在我的CoreOS虚拟机下运行的虚拟机,我想build立2个容器

  1. 首先是mysql数据库(Mysql)
  2. 第二个是基于幻影图像的web应用程序图像(myghost)构build

A – 可以工作的方法:使用docker:

命令,我用来启动我的2个容器

docker build -t myghost . docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=ghost -e MYSQL_PASSWORD=password -e MYSQL_USER=ghost -p 3306 mysql sudo docker run -d --link mysql --name ghost -p 80:2368 myghost 

端口80正确显示,我可以从我的主机networking连接

从另一个vm扫描nmap显示端口80打开( nmap -sT 192.168.1.25

 Starting Nmap 7.40 ( https://nmap.org ) at 2017-04-05 23:06 CEST Nmap scan report for coreos1.home (192.168.1.25) Host is up (0.000088s latency). Not shown: 996 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 4001/tcp open newoak 32779/tcp open sometimes-rpc21 MAC Address: 08:00:27:90:17:CF (Oracle VirtualBox virtual NIC) 

iptablesconfiguration( sudo iptables -L )返回:

 Chain DOCKER (3 references) target prot opt source destination ACCEPT tcp -- anywhere 172.19.0.2 tcp dpt:mysql ACCEPT tcp -- anywhere 172.19.0.3 tcp dpt:2368 

sudo iptables -S显示

 -A DOCKER -d 172.19.0.2/32 ! -i br-282da314ef5d -o br-282da314ef5d -p tcp -m tcp --dport 3306 -j ACCEPT -A DOCKER -d 172.19.0.3/32 ! -i br-282da314ef5d -o br-282da314ef5d -p tcp -m tcp --dport 2368 -j ACCEPT 

注:我的Dockerfile构buildmyghost图像只包含一个js文件的副本

B – 不起作用的方法:用docker-compose:

这里是我的docker-compose.yml

 version: '2' services: mysql: image: mysql container_name: mysql ports: - "3306" environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=ghost - MYSQL_USER=ghost - MYSQL_PASSWORD=password myghost: build: ./myghost container_name: myghost depends_on: - mysql ports: - "80:2368" expose: - "80" 

NB在这个configuration中,我尝试使用不改变问题的expose:指令

然后我启动一个docker-compose up --build -d首先执行的鬼web应用程序永远不会正常启动(错误连接到数据库),奇怪,因为我docker-compose.yml包含depends_on …

docker工检查鬼容器返回

错误:连接ECONNREFUSED 172.19.0.2:3306

错误:连接ECONNREFUSED 172.19.0.2:3306

在第二次运行容器启动

 docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 945d75995d11 appghost_myghost "/entrypoint.sh npm s" 21 minutes ago Up 21 minutes 80/tcp, 0.0.0.0:80->2368/tcp myghost aea76509818e mysql "docker-entrypoint.sh" 25 minutes ago Up 25 minutes 0.0.0.0:32776->3306/tcp mysql docker-compose ps Name Command State Ports ---------------------------------------------------------------------------- myghost /entrypoint.sh npm start Up 0.0.0.0:80->2368/tcp, 80/tcp mysql docker-entrypoint.sh mysqld Up 0.0.0.0:32776->3306/tcp 

ping 2个容器之间是可以的
但是,我的Web应用程序是不可缓解的,并显示端口80作为nmap扫描过滤

 PORT STATE SERVICE 22/tcp open ssh 80/tcp filtered http 32780/tcp filtered sometimes-rpc23 

我也注意到这种方式iptables -Sconfiguration看起来像那样(只有diff部分)

 -A DOCKER -d 172.19.0.2/32 ! -i br-282da314ef5d -o br-282da314ef5d -p tcp -m tcp --dport 3306 -j ACCEPT -A DOCKER -d 172.19.0.3/32 ! -i br-282da314ef5d -o br-282da314ef5d -p tcp -m tcp --dport 2368 -j ACCEPT 

更多信息

 Docker version 1.12.6, build d5236f0 Docker-compose version 1.11.2, build dfed245 CoreOs 1298.7.0 VirtualBox v5.1.8 / Bridged network configuration uname -a: Linux coreos1 4.10.4-coreos-r1 #1 SMP Fri Mar 31 01:58:22 UTC 2017 x86_64 Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz GenuineIntel GNU/Linux 

遇到这种问题时重启coreOs解决问题