![psycopg2.OperationalError:无法连接到服务器:没有到主机的路由服务器是否在主机“db”上运行并在端口上接受 TCP/IP 连接](https://linux22.com/image/767226/psycopg2.OperationalError%EF%BC%9A%E6%97%A0%E6%B3%95%E8%BF%9E%E6%8E%A5%E5%88%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9A%E6%B2%A1%E6%9C%89%E5%88%B0%E4%B8%BB%E6%9C%BA%E7%9A%84%E8%B7%AF%E7%94%B1%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%98%AF%E5%90%A6%E5%9C%A8%E4%B8%BB%E6%9C%BA%E2%80%9Cdb%E2%80%9D%E4%B8%8A%E8%BF%90%E8%A1%8C%E5%B9%B6%E5%9C%A8%E7%AB%AF%E5%8F%A3%E4%B8%8A%E6%8E%A5%E5%8F%97%20TCP%2FIP%20%E8%BF%9E%E6%8E%A5.png)
按照此处的说明,在 openSUSE Tumbleweed 上使用 Docker 版本 20.10.6-ce,构建 8728dd246c3a 是没有问题的。
https://github.com/mirumee/saleor-platform#how-to-run-it
但是在 openSUSE Leap 15.3 上使用 Docker 版本 19.03.15、build 99e3ed89195c 时,该migrate
命令(最后一条命令)会引发错误:
$ git clone https://github.com/mirumee/saleor-platform.git --recursive --jobs 3
$ cd saleor-platform
$ docker-compose build
$ docker-compose run --rm api python3 manage.py migrate
错误
psycopg2.OperationalError:无法连接到服务器:没有到主机的路由服务器是否在主机“db”(172.21.0.4)上运行并在端口 5432 上接受 TCP/IP 连接?
错误日志
m3@localhost:~/repos/saleor-platform> docker-compose run --rm api python3 manage.py migrate
Creating network "saleor-platform_default" with the default driver
Creating network "saleor-platform_saleor-backend-tier" with driver "bridge"
Creating saleor-platform_jaeger_1 ... done
Creating saleor-platform_db_1 ... done
Creating saleor-platform_redis_1 ... done
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
self.connect()
File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 200, in connect
self.connection = self.get_new_connection(conn_params)
File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection
connection = Database.connect(**conn_params)
File "/usr/local/lib/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not connect to server: No route to host
Is the server running on host "db" (172.21.0.4) and accepting
TCP/IP connections on port 5432?
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 330, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 371, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 85, in wrapped
res = handle_func(*args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/core/management/commands/migrate.py", line 92, in handle
executor = MigrationExecutor(connection, self.migration_progress_callback)
File "/usr/local/lib/python3.8/site-packages/django/db/migrations/executor.py", line 18, in __init__
self.loader = MigrationLoader(self.connection)
File "/usr/local/lib/python3.8/site-packages/django/db/migrations/loader.py", line 53, in __init__
self.build_graph()
File "/usr/local/lib/python3.8/site-packages/django/db/migrations/loader.py", line 216, in build_graph
self.applied_migrations = recorder.applied_migrations()
File "/usr/local/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 77, in applied_migrations
if self.has_table():
File "/usr/local/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 55, in has_table
with self.connection.cursor() as cursor:
File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 259, in cursor
return self._cursor()
File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 235, in _cursor
self.ensure_connection()
File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
self.connect()
File "/usr/local/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
self.connect()
File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 200, in connect
self.connection = self.get_new_connection(conn_params)
File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection
connection = Database.connect(**conn_params)
File "/usr/local/lib/python3.8/site-packages/psycopg2/__init__.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not connect to server: No route to host
Is the server running on host "db" (172.21.0.4) and accepting
TCP/IP connections on port 5432?
m3@localhost:~/repos/saleor-platform>
尝试过
可能是操作系统设置问题。我5432
通过防火墙将 PostgreSQL 端口添加到公共端口,但仍然收到错误。
尝试过
无效:
- 重启 Docker 服务
- 重启机器
尝试过
以下命令没有帮助:
https://stackoverflow.com/a/57502873/3405291
通过以下方式获取Subnet
( 172.19.0.0/16
):
docker network ls
docker inspect ${NETWORK_NAME}
然后:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=172.19.0.0/16 accept'
sudo firewall-cmd --reload
sudo systemctl restart docker.service
尝试过
这种方法不起作用,即将其添加到docker-compose.yml
文件内的数据库服务中:
environment:
- POSTGRES_HOST_AUTH_METHOD=trust
答案1
在 openSUSE Leap 15.3 上更新到 Docker 20 解决了以下错误:
m3@dhcppc3:~> docker -v
Docker version 20.10.6-ce, build 8728dd246c3a