我有这个设置
1) Docker容器服务器在使用命令
创建的后台运行postgresql映像
docker run --name post2 -d postgres
2)客户端Docker容器运行ubuntu,python运行psycopg2
我的Postgresql容器暴露在ip地址172.7.0.2:5432上。在我的客户端容器中输入命令curl 172.17.0.2:5432
时,我能够与服务器通信
Docker容器服务器记录LOG:invalid length of startup packet
。我不发送任何消息包,但它显示与服务器的通信。
我在 Client Docker Container 中的python2 shell中运行这些命令。
>>> conn = psycopg2.connect(host='172.17.0.2', port='5432', user='postgres', database='yoman')
>>> cur = conn.cursor()
>>> cur.execute("CREATE TABLE test (id serial PRIMARY KEY, num integer, data varchar);")
>>> conn1 = psycopg2.connect(host='172.17.0.2', port='5432', user='postgres', database='template1')
yeoman
和template1
是我创建的服务器中的预创建数据库。
我相信它成功地与服务器通信,因为它认识到数据库asdf
不存在于下面的堆栈跟踪中。
>>> conn = psycopg2.connect(host='172.17.0.2', port='5432', user='postgres', database='asdfd')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/psycopg2/__init__.py", line 164, in connect
conn = _connect(dsn, connection_factory=connection_factory, async=async)
psycopg2.OperationalError: FATAL: database "asdfd" does not exist
我的问题是我的命令没有在数据库中执行。
我运行下面的代码来创建一个名为“test”的表,但没有任何反应。也没有抛出错误。
cur.execute("CREATE TABLE test (id serial PRIMARY KEY, num integer, data varchar);")
我的Postgres数据库,显示没有表格。
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
yoman | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
(4 rows)
postgres=# \c yoman
You are now connected to database "yoman" as user "postgres".
yoman=# \d
No relations found.
感谢您的任何帮助。
感谢。