Mysql docker compose容器可以';iptables升级后,不能互相连接
我有一台Debian 4.9.65-3+deb9u1机器 我有一个docker compose设置,运行良好(yml文件如下) 然后我意外地做了Mysql docker compose容器可以';iptables升级后,不能互相连接,mysql,docker-compose,Mysql,Docker Compose,我有一台Debian 4.9.65-3+deb9u1机器 我有一个docker compose设置,运行良好(yml文件如下) 然后我意外地做了apt-get-update-php——自从任何更新都完成以来,它肯定已经过了很久了,因为它疯了,更新了数百个包 我重新启动了docker compose集合,但它不会启动,并显示错误消息: Failed to program FILTER chain: iptables failed: iptables --wait -I FORWARD -o br-
apt-get-update-php
——自从任何更新都完成以来,它肯定已经过了很久了,因为它疯了,更新了数百个包
我重新启动了docker compose集合,但它不会启动,并显示错误消息:
Failed to program FILTER chain: iptables failed: iptables --wait -I FORWARD -o br-7459c5357c09 -j DOCKER: iptables v1.8.2 (nf_tables): RULE_INSERT failed (Invalid argument): rule in chain FORWARD
我通过sw3itch使用遗留的iptables“解决”了这个问题
update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
然后docker compose开始工作,因为它启动了容器,但webapp容器无法使用之前工作的连接字符串连接到数据库容器:
server=database;user=BasecampGateway;database=BasecampGateway;port=3306
连接刚刚超时
我可以从主机连接到数据库,所以我有点困惑
我修改了webapp的Dockerfile以安装ping和mysql客户端。我可以ping数据库服务器(通过ip地址),但是我不能使用mysql连接到它(超时)
docker-compose.yaml:
version: '2.0'
services:
database:
build: ./database
command: --default-authentication-plugin=mysql_native_password
cap_add:
- SYS_NICE # CAP_SYS_NICE
restart: always
volumes:
- ./data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=redacted
# For mysqldump from host
ports:
- 127.0.0.1:6603:3306
logging:
driver: "json-file"
options:
max-size: "5m"
max-file: "10"
networks:
basecamp_net:
ipv4_address: 172.16.2.2
webapp:
build: ./webapp
depends_on:
- database
restart: always
volumes:
- ./config:/usr/share/BasecampGateway
- ./config:/usr/share/JobRunner
- ./webapp:/opt/BasecampGateway
- /root/nmon:/usr/share/nmon
ports:
- 127.0.0.1:8090:8090
# has to be 127.0.0.1 not localhost
logging:
driver: "json-file"
options:
max-size: "5m"
max-file: "10"
networks:
basecamp_net:
ipv4_address: 172.16.2.3
jobrunner:
build: ./jobrunner
depends_on:
- database
- webapp
restart: always
volumes:
- ./config:/usr/share/JobRunner
- ./jobrunner:/opt/JobRunner
logging:
driver: "json-file"
options:
max-size: "5m"
max-file: "10"
networks:
basecamp_net:
ipv4_address: 172.16.2.4
cpu_shares: 256
networks:
basecamp_net:
ipam:
driver: default
config:
- subnet: 172.16.2.0/24
数据库Dockerfile:
FROM mysql:latest
VOLUME /var/lib/mysql
ENV MYSQL_ROOT_PASSWORD=redacted
EXPOSE 3306
COPY sqlinit/* /docker-entrypoint-initdb.d/
我通过将所有IP地址更改为不同的子网来“修复”此问题。我不知道为什么它现在有效,以前也没有。我仍然不明白是否需要为docker compose使用遗留iptables。所有的建议都被感激地接受了!