Mysql docker compose容器可以';iptables升级后,不能互相连接

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-

我有一台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-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。所有的建议都被感激地接受了!