【问题标题】:docker-compose: send only some traffic through another container (vpn)docker-compose:仅通过另一个容器(vpn)发送一些流量
【发布时间】:2020-05-22 16:47:14
【问题描述】:

我有一个由爬虫和 MySQL 数据库组成的应用。当我做我的爬虫时,我想通过一个 VPN,但是当我连接到我的数据库时不使用 VPN。我已经设法让我的应用容器通过我的 VPN 容器发送所有流量,但现在我无法连接到位于 localhost 的数据库。我尝试使用主机地址localhost127.0.0.1 和数据库的容器名称,但它们都不起作用。

如何通过我的 VPN 容器路由 一些 流量,而一些流量则正常?

这是我的 docker compose 文件:

version: '3.7' 
services: 
    db:
        image: mysql:8
        restart: always
        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
        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

【问题讨论】:

  • 请告诉我,如果您在设置它时仍有问题。否则,你能接受我的回答吗?谢谢

标签: docker docker-compose vpn


【解决方案1】:

你必须把 dbvpn 放在同一个网络上。本地容器流量不通过 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:

【讨论】:

  • 这对任何人都有效吗?使用 docker-compose 版本 1.27.4,我可以通过来自 vpnapp 容器的 vpn 隧道ping。但我不能来自app 容器的ping dbping:错误地址'db'。我用links: - db 试过这个,没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 2017-11-13
  • 2021-03-04
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
相关资源
最近更新 更多