我试图实现的目标是:
[使用此项目在Docker容器内的一台主机上启动1-n VPN客户端:https://hub.docker.com/r/qmcgaw/private-internet-access/。主机已关闭VPN。然后,连接同样也在容器中运行的1-N个不同的python应用程序,每个python应用程序都将其中一个VPN用作与外部世界的连接,同时写入主机postgresql数据库。
实际上,起作用的是
# 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
什么不起作用
# 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?
我想做什么
创建了第二个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
使用--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数据库就足够了。
非常感谢您的帮助!
将某物放入容器中与它使用多少互连网无关。通过VPN运行它也是如此。