Я опробовал Docker с UFW, и я много читал об этом.
Моя цель состояла в том, чтобы подключиться к базе данных mariadb на хост-компьютере из образа докера.
Host (running ufw) -> docker container 1 - mediawiki -> Database (onHost)
-> docker container 2 - phpwebserver -> Database (onHost)
-> docker container 3 - nextcloud -> Database (onHost)
-> .......
I
По умолчанию докер использует 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: портотображение и хост базы данных в файле 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 в хост-системе к этому образу докера.Или просто с помощью 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
Может кто-нибудь предоставитькакая-нибудь помощь, чтобы заставить этот шаг работать?
Большое спасибо,
Дэвид