我正在寻找一种连接docker容器应用的方法,以便它可以通过https://postgresapp.com/访问Postgres数据库
想知道是否有某些端口要打开以及yml文件看起来是什么样子,以启用docker-compose来处理本地运行的postgres。
谢谢!
答案 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侦听其他端口,请在应用程序配置中指定该端口。