docker-compose:仅通过其他容器(vpn)发送一些流量

时间:2020-02-06 15:23:23

标签: docker docker-compose vpn

我有一个由搜寻器和MySQL数据库组成的应用程序。我在执行搜寻器时想通过VPN,但是在连接到数据库时不使用VPN。我设法让我的应用程序容器通过我的VPN容器发送所有流量,但是现在我无法连接到位于本地主机的数据库。我尝试使用主机地址truelocalhost和数据库的容器名称,但是它们都不起作用。

如何通过我的VPN容器路由一些通信,而一些通信却正常进行?

这是我的docker撰写文件:

127.0.0.1

1 个答案:

答案 0 :(得分:0)

您必须将 db vpn 放在同一网络上。本地容器流量未通过vpn路由。如果您不想通过VPN路由外部流量,则必须在VPN服务上使用iptables。 另外,请确保在您的ovpn配置中包含redirect-gateway def1

version: '3.7' 
services: 
  db:
    image: mysql:8
    restart: always
    networks:
      - default
    environment: 
      MYSQL_DATABASE: my_db
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: pw
      MYSQL_PASSWORD: pw
      MYSQL_PORT: 3308
    ports:
      - "3308:3306"
    command: --default-authentication-plugin=mysql_native_password
  vpn:
    build:
      context: ./
      dockerfile: Dockerfile-openvpn-dev
    restart: always
    networks:
      - default
    #might be necessary:
    #links:
    #  - db
    cap_add:
      - NET_ADMIN
    devices: 
      - /dev/net/tun
    volumes:
      - ./openvpn:/vpn
    command: openvpn --config /vpn/config.ovpn --auth-user-pass /vpn/client.pwd --auth-nocache
  app:
    build:
      context: ./
      dockerfile: Dockerfile-crawler-dev
    environment: 
      MYSQL_DATABASE: my_db
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: pw
      MYSQL_PASSWORD: pw
      MYSQL_HOST: db
      MYSQL_PORT: 3306
    network_mode: service:vpn
    depends_on:
      - vpn

networks:
  default:
相关问题