如何使用容器化 VPN 并从 docker python 应用程序写入主机 PostgreSQL 数据库
How to use containerized VPN and write into hosts PostgreSQL database from docker python application
我试图实现的目标如下:
使用此项目在 docker 容器内的一台主机上启动 1-n 个 VPN 客户端:https://hub.docker.com/r/qmcgaw/private-internet-access/。主机已关闭 VPN。然后连接 1-N 个不同的 python 应用程序,它们也在容器中 运行,每个 python 应用程序都使用其中一个 VPN 作为与外部世界的连接,同时写入主机 postgresql数据库。
实际上,起作用的是
- 连接 VPN 容器(用 https://ipinfo.io 测试)
- 使用 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
什么不起作用
- 将 python docker 容器连接到主机数据库,同时阻止此容器使用主机互联网连接
# 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?
我尝试做的事情
- 如果我为 python 容器指定 --net=host 我可以写入主机数据库,但我在这里缺少 VPN 连接
创建了第二个 docker hostonly 网络并将已经连接到 pia 网络的 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
在使用 --network
关键字时不允许将 --add-host
添加到 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 数据库也可以工作(同时将其绑定到静态卷)。但是现在使用主机的 postgresql 数据库就足够了。
非常感谢任何帮助!
将某物放入容器与它使用多少互联网无关。 运行 通过 vpn 也一样。
好的,
就像 larsks 评论的那样真的很简单。我在 linux 上,ip a
给了我 docker0
接口,使用该 IP 进行数据库连接,一切正常。
谢谢。
我试图实现的目标如下:
使用此项目在 docker 容器内的一台主机上启动 1-n 个 VPN 客户端:https://hub.docker.com/r/qmcgaw/private-internet-access/。主机已关闭 VPN。然后连接 1-N 个不同的 python 应用程序,它们也在容器中 运行,每个 python 应用程序都使用其中一个 VPN 作为与外部世界的连接,同时写入主机 postgresql数据库。
实际上,起作用的是
- 连接 VPN 容器(用 https://ipinfo.io 测试)
- 使用 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
什么不起作用
- 将 python docker 容器连接到主机数据库,同时阻止此容器使用主机互联网连接
# 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?
我尝试做的事情
- 如果我为 python 容器指定 --net=host 我可以写入主机数据库,但我在这里缺少 VPN 连接
创建了第二个 docker hostonly 网络并将已经连接到 pia 网络的 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
在使用
--network
关键字时不允许将--add-host
添加到 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 数据库也可以工作(同时将其绑定到静态卷)。但是现在使用主机的 postgresql 数据库就足够了。
非常感谢任何帮助!
将某物放入容器与它使用多少互联网无关。 运行 通过 vpn 也一样。
好的,
就像 larsks 评论的那样真的很简单。我在 linux 上,ip a
给了我 docker0
接口,使用该 IP 进行数据库连接,一切正常。
谢谢。