我们如何将docker应用程序连接到本地运行的postgres?

时间:2017-12-08 21:23:16

标签: postgresql docker

我正在寻找一种连接docker容器应用的方法,以便它可以通过https://postgresapp.com/访问Postgres数据库

想知道是否有某些端口要打开以及yml文件看起来是什么样子,以启用docker-compose来处理本地运行的postgres。

谢谢!

3 个答案:

答案 0 :(得分:0)

您必须在主机中的postgres配置文件中进行更改,尤其是

1)pg_hba.conf 2)postgres.conf

您可以在/ var / lib / postgresql / [version] / path

中找到上述配置

首先检查您的docker0网桥接口,它可能是172.17.0.0/16,如果没有相应更改。

在postgresql.conf路径中进行更改将与pg_hba.conf相同。

listenaddress to“*”

然后在pg_hba.conf中添加规则为

主持所有172.17.0.0/16 md5。

然后在docker应用程序中使用主机IP地址连接到在主机上运行的姿势。

答案 1 :(得分:-1)

从容器内部或容器外部访问数据库之间没有区别。

假设Postgres数据库正在localhost上运行。如果您想从一个小的Python脚本连接到它,您可以按照以下步骤进行操作,如Docs中所示:

#!/usr/bin/python
import psycopg2
import sys

def main():
    #Define our connection string
    conn_string = "host='localhost' dbname='my_database' user='postgres' password='secret'"

    # print the connection string we will use to connect
    print "Connecting to database\n ->%s" % (conn_string)

    # get a connection, if a connect cannot be made an exception will be raised here
    conn = psycopg2.connect(conn_string)

    # conn.cursor will return a cursor object, you can use this cursor to perform queries
    cursor = conn.cursor()
    print "Connected!\n"

if __name__ == "__main__":
    main()

为了运行此脚本,您需要在本地计算机上安装Python和psycopg2,可能在虚拟环境中。或者,您可以将其放入容器中。您可以使用安装说明定义Dockerfile,而不是手动安装所有内容。它可能看起来像这样:

FROM python:latest
ADD python-script.py /opt/www/python-script.py
RUN pip install psycopg2
CMD ["python", "/opt/www/python-script.py"]

如果我们建立并运行......

dave-mbp:Desktop dave$ ls -la
-rw-r--r--    1 dave  staff   135 Dec  8 19:05 Dockerfile
-rw-r--r--    1 dave  staff    22 Dec  8 19:04 python-script.py

dave-mbp:Desktop dave$ docker build -t python-script .
Sending build context to Docker daemon  17.92kB
Step 1/4 : FROM python:latest
latest: Pulling from library/python
85b1f47fba49: Already exists 
ba6bd283713a: Pull complete 
817c8cd48a09: Pull complete 
47cc0ed96dc3: Pull complete 
4a36819a59dc: Pull complete 
db9a0221399f: Pull complete 
7a511a7689b6: Pull complete 
1223757f6914: Pull complete 
Digest: sha256:db9d8546f3ff74e96702abe0a78a0e0454df6ea898de8f124feba81deea416d7
Status: Downloaded newer image for python:latest
 ---> 79e1dc9af1c1
Step 2/4 : ADD python-script.py /opt/www/python-script.py
 ---> 21f31c8803f7
Step 3/4 : RUN pip install psycopg2
 ---> Running in f280c82d74e7
Collecting psycopg2
  Downloading psycopg2-2.7.3.2-cp36-cp36m-manylinux1_x86_64.whl (2.7MB)
Installing collected packages: psycopg2
Successfully installed psycopg2-2.7.3.2
 ---> bd38f911bb6a
Removing intermediate container f280c82d74e7
Step 4/4 : CMD python /opt/www/python-script.py
 ---> Running in 159b70861893
 ---> 4aa783be5c90
Removing intermediate container 159b70861893
Successfully built 4aa783be5c90
Successfully tagged python-script:latest

dave-mbp:Desktop dave$ docker run python-script
>> Connected!

容器主要是包装解决方案。我们将能够连接到外部数据库或API端点,就像我们从容器外部运行所有内容一样。

有一件事需要记住,但是如果您正在使用docker toolbox / virtualbox,则localhost可能会解析为虚拟机。在这种情况下,除非您在VM中运行桥接网络连接,否则不会连接到localhost。否则,只需指定主机IP而不是localhost

答案 2 :(得分:-1)

Postgres默认端口为5432

Docker提供了不同的networking modes。我可以告诉你如何使用桥接模式实现目标(默认使用)。

总有一个桥接网络允许您访问主机。它默认创建并调用docker0

在终端ip addr show docker0中运行以下命令,以查看您运行的所有容器的主机IP。

我机器上的输出:

developer@dlbra:~$ ip addr show docker0
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:b4:95:60:89 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever

因此,您在docker-compose.yml中不需要任何其他配置 您只需将db主机配置为您看到的IP地址即可。就我而言,它将是172.17.0.1

如果本地安装的Postgres侦听其他端口,请在应用程序配置中指定该端口。