如何使用容器化VPN并从docker python应用程序写入主机PostgreSQL数据库

问题描述 投票:0回答:1

我试图实现的目标是:

[使用此项目在Docker容器内的一台主机上启动1-n VPN客户端:https://hub.docker.com/r/qmcgaw/private-internet-access/。主机已关闭VPN。然后,连接同样也在容器中运行的1-N个不同的python应用程序,每个python应用程序都将其中一个VPN用作与外部世界的连接,同时写入主机postgresql数据库。

实际上,起作用的是

  1. VPN容器的连接(用https://ipinfo.io测试)
  2. 将VPN容器用作python应用程序的网络容器
# create VPN docker and start it
docker run -d --init --name=pia --cap-add=NET_ADMIN --device=/dev/net/tun -e REGION="someregion" -e USER=username -e PASSWORD='password' qmcgaw/private-internet-access

# run python application with VPN IP
docker run --rm --name python_app --network=container:pia mypythonappimage

什么不起作用

  1. 将python docker容器连接到hosts数据库,同时阻止该容器使用主机互联网连接
# Errors returned from python app
could not connect to server: Connection refused
        Is the server running on host "localhost" (127.0.0.1) and accepting
        TCP/IP connections on port 5432?
could not connect to server: Cannot assign requested address
        Is the server running on host "localhost" (::1) and accepting
        TCP/IP connections on port 5432?

我想做什么

  1. 如果我为python容器指定--net = host,我可以写入hosts数据库,但这里缺少VPN连接
  2. 创建了第二个docker hostonly网络,并将已经连接到pia-network的python容器也连接到该hostonly网络:

    docker network create -d bridge --internal hostonly
    docker create --name python_app --network=container:pia mypythonappimage
    docker network connect hostonly python_app
    docker start python_app
    
  3. 使用--add-host关键字时不允许将--network添加到python_app容器中

但也是这里,与上面相同的错误。

假设

我可以看到标准docker网桥网络内的pia容器。也许我必须创建一些自己的桥接网络并进行配置?或者,我必须在VPN容器内路由我的主机的IP,以便使用与VPN相同的网络堆栈的任何容器都可以连接到主机(同时防止使用主机外部IP)。但是我在哪里以及如何正确路由该IP?

此外,我假设我必须配置postgresql.conf和g_hba.conf。出于测试目的,我信任127.17.0.0/24作为pg_hba.conf中的主机连接,并且listen_addresses ='*'。但是什么是正确的(并保存)配置?

我在这里采用的方法是否合理?昨天才真正开始使用docker。我可以想象使用dockerized postgresql数据库也可以工作(同时将其绑定到静态volumne)。但是就目前而言,使用主机postgresql数据库就足够了。

非常感谢您的帮助!

python postgresql docker openvpn docker-networking
1个回答
0
投票

将某物放入容器中与它使用多少互连网无关。通过VPN运行它也是如此。

© www.soinside.com 2019 - 2024. All rights reserved.