【问题标题】:coreos docker-compose v2: exposed port filtered behind Firewall and unreachablecoreos docker-compose v2:暴露的端口在防火墙后面过滤并且无法访问
【发布时间】:2023-04-03 12:02:01
【问题描述】:

我发现 docker-compose 与 docker 之间的网络端口公开有一个奇怪的行为,我的意思是我无法正确设置 docker-compose

在 Virtualbox 下运行的 CoreOS VM 上,我想设置 2 个容器

  1. 首先是mysql数据库(Mysql)
  2. 第二个是基于ghost镜像构建的web应用镜像(myghost)

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 已正确公开,我可以从我的主机网络连接

nmap 从另一个 vm 扫描显示端口 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)

Iptables 配置 (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

注意:我构建 myghost 镜像的 Dockerfile 只包含一个 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 在这个配置中我尝试使用不会改变问题的暴露:指令

然后我启动docker-compose up --build -d第一次执行ghost webapp 无法正常启动(连接到数据库时出错),很奇怪,因为我的docker-compose.yml 包含depends_on ...

docker inspect ghost 容器返回

错误:连接 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 正常
但是,我的 Web 应用程序无法访问,并通过 nmap 扫描将端口 80 显示为 已过滤

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

我也注意到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

更多信息

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 VM 并使用 docker-compose 重新启动似乎可以解决该问题。有人可以确认配置是否正确或已经遇到该问题?跨度>

标签: docker docker-compose firewall coreos


【解决方案1】:

遇到此类问题重启coreOs即可解决问题

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 2017-01-03
    • 2019-10-24
    • 1970-01-01
    • 2019-09-10
    • 2014-11-28
    • 1970-01-01
    • 2020-02-21
    相关资源
    最近更新 更多