我用ufw测试了docker,我读了很多。
我的目标是从docker映像连接到主机上的mariadb数据库。
Host (running ufw) -> docker container 1 - mediawiki -> Database (onHost)
-> docker container 2 - phpwebserver -> Database (onHost)
-> docker container 3 - nextcloud -> Database (onHost)
-> .......
我
默认情况下,docker使用可禁用的iptables。
/etc/docker/daemon.json
{
"iptables": false
}
然后设置
/etc/default/ufw
DEFAULT_FORWARD_POLICY to ACCEPT
最后在after.rules文件中添加这些行
/etc/ufw/after.rules
* nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE
COMMIT
回到docker:现在我添加localhost:port mapping 以及docker-compose.yml文件中的数据库主机
ports:
- "127.0.0.1:8080:8080"
MEDIAWIKI_DB_HOST: 172.17.0.1 <- this was the docker0 interface
在docker ps中,docker作为localhost运行:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cffb491c84b2 db_mediawiki "/docker-entrypoint.…" 22 minutes ago Up 22 minutes 127.0.0.1:8080->8080/tcp, 9000/tcp mediawiki_wiki
现在我可以用主机系统上的反向nginx连接到这个docker映像。或者干脆用 curl localhost:8080/wiki/main_page
如果没有ufw,所有连接似乎都可以工作,但是如果启用了ufw,所有连接都会被阻止从网桥到docker0接口?
[UFW BLOCK] IN=br-9da71acf3f9f OUT= MAC=02:42:f2:7b:35:7b:02:42:ac:12:00:02:08:00 SRC=172.18.0.2 DST=172.17.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=53146 DF PROTO=TCP SPT=36126 DPT=3306 WINDOW=29200 RES=0x00 SYN URGP=0
有人能提供一些帮助让这一步工作吗?
非常感谢,
大卫
1条答案
按热度按时间vi4fp9gy1#
你不需要改变
/etc/ufw/after.rules
.只需将此规则添加到ufw
sudo ufw allow in on docker0 from 172.17.0.0/16 to 172.17.0.0/16
,它将允许docker0接口上的所有数据包与172.17.0.0网络连接。