Python docker网络未将我的服务连接在一起
我遇到docker network无法将我的服务连接在一起的问题,我有一个postgres映像和一个python映像需要它们连接,但在我从python服务调用连接到postgres服务时,我的连接被拒绝。我尝试打开端口5432和所有主机,查看是否可以获得任何连接,但同样的错误也会发生,我尝试使用服务名称连接到端口5432和所有主机,同样的问题仍在发生。有人知道为什么吗Python docker网络未将我的服务连接在一起,python,django,postgresql,docker-compose,dockerfile,Python,Django,Postgresql,Docker Compose,Dockerfile,我遇到docker network无法将我的服务连接在一起的问题,我有一个postgres映像和一个python映像需要它们连接,但在我从python服务调用连接到postgres服务时,我的连接被拒绝。我尝试打开端口5432和所有主机,查看是否可以获得任何连接,但同样的错误也会发生,我尝试使用服务名称连接到端口5432和所有主机,同样的问题仍在发生。有人知道为什么吗 =========================================Django settings.py=====
=========================================Django settings.py==============================================
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'db',
'PORT': '5432',
}
}
......
ALLOWED_HOSTS = ['*']
========================================Error==========================================================
ERROR: Service 'web' failed to build: The command '/bin/sh
-c python manage.py makemigrations' returned a non-zero code: 1
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 217, in ensure_connection
self.connect()
File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 195, in connect
self.connection = self.get_new_connection(conn_params)
File "/usr/local/lib/python3.7/site-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
connection = Database.connect(**conn_params)
File "/usr/local/lib/python3.7/site-packages/psycopg2/__init__.py", line 126, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not translate host name "db" to address: No address associated with hostname
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 21, in <module>
main()
File "manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 323, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 364, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 83, in wrapped
res = handle_func(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/django/core/management/commands/makemigrations.py", line 101, in handle
loader.check_consistent_history(connection)
File "/usr/local/lib/python3.7/site-packages/django/db/migrations/loader.py", line 283, in check_consistent_history
applied = recorder.applied_migrations()
File "/usr/local/lib/python3.7/site-packages/django/db/migrations/recorder.py", line 73, in applied_migrations
if self.has_table():
File "/usr/local/lib/python3.7/site-packages/django/db/migrations/recorder.py", line 56, in has_table
return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 256, in cursor
return self._cursor()
File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 233, in _cursor
self.ensure_connection()
File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 217, in ensure_connection
self.connect()
File "/usr/local/lib/python3.7/site-packages/django/db/utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 217, in ensure_connection
self.connect()
File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 195, in connect
self.connection = self.get_new_connection(conn_params)
File "/usr/local/lib/python3.7/site-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
connection = Database.connect(**conn_params)
File "/usr/local/lib/python3.7/site-packages/psycopg2/__init__.py", line 126, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not translate host
name "db" to address: No address associated with hostname
=============================Docker Compose File=================================
version: "3"
services:
db:
image: postgres:12
volumes:
- /home/--path-to-folder/data/postgres:/var/lib/postgresql/data
restart: always
environment:
POSTGRES_PASSWORD: postgres
ports:
- "5432:5432"
web:
build: ./backend
command: sh -c "python backend/manage.py makemigrations && python backend/manage.py migrate && python backend/manage.py runserver 0.0.0.0:8000"
# command: python3 app/backend/manage.py runserver 0.0.0.0:8000
volumes:
- .:/backend
links:
- db
ports:
- "8000:8000"
depends_on:
- db
# frontend:
# build: ./frontend
# command: serve -s build -l 3000
# volumes:
# - ./frontend:/app/frontend
# ports:
# - "3000:3000"
# depends_on:
# - db
volumes:
postgres_data:
=============================================================================================================Django settings.py==============================================
数据库={
“默认值”:{
“引擎”:“django.db.backends.postgresql_psycopg2”,
'姓名':'博士后',
'USER':'postgres',
“密码”:“postgres”,
'主机':'数据库',
“端口”:“5432”,
}
}
......
允许的_主机=['*']
======================================================错误==========================================================
错误:无法生成服务“web”:命令“/bin/sh”
-c python manage.py makemigrations'返回一个非零代码:1
回溯(最近一次呼叫最后一次):
文件“/usr/local/lib/python3.7/site packages/django/db/backends/base/base.py”,第217行,在连接中
self.connect()
文件“/usr/local/lib/python3.7/site packages/django/db/backends/base/base.py”,第195行,在connect中
self.connection=self.get_new_connection(连接参数)
文件“/usr/local/lib/python3.7/site packages/django/db/backends/postgresql/base.py”,第178行,在get\u new\u连接中
连接=数据库。连接(**连接参数)
文件“/usr/local/lib/python3.7/site packages/psycopg2/_init__.py”,第126行,在connect中
连接=连接(dsn,连接工厂=连接工厂,**kwasync)
psycopg2.OperationalError:无法将主机名“db”转换为地址:没有与主机名关联的地址
上述异常是以下异常的直接原因:
回溯(最近一次呼叫最后一次):
文件“manage.py”,第21行,在
main()
文件“manage.py”,第17行,主
从命令行(sys.argv)执行命令
文件“/usr/local/lib/python3.7/site packages/django/core/management/__init__.py”,第381行,从命令行执行
utility.execute()
文件“/usr/local/lib/python3.7/site packages/django/core/management/__init__.py”,执行中第375行
self.fetch_命令(子命令)。从_argv(self.argv)运行_
文件“/usr/local/lib/python3.7/site packages/django/core/management/base.py”,第323行,在运行中,从
self.execute(*args,**cmd_选项)
文件“/usr/local/lib/python3.7/site packages/django/core/management/base.py”,执行中第364行
输出=self.handle(*args,**选项)
文件“/usr/local/lib/python3.7/site packages/django/core/management/base.py”,第83行,包装
res=句柄函数(*args,**kwargs)
handle中的文件“/usr/local/lib/python3.7/site packages/django/core/management/commands/makemigrations.py”,第101行
加载程序。检查\u一致\u历史记录(连接)
文件“/usr/local/lib/python3.7/site packages/django/db/migrations/loader.py”,第283行,检查历史记录是否一致
applied=记录器。applied_迁移()
文件“/usr/local/lib/python3.7/site packages/django/db/migrations/recorder.py”,第73行,在应用程序迁移中
如果self.has_table():
has_表第56行的文件“/usr/local/lib/python3.7/site packages/django/db/migrations/recorder.py”
返回self.connection.introspection.table_名称(self.connection.cursor())中的self.Migration.meta.db_表
光标中的文件“/usr/local/lib/python3.7/site packages/django/db/backends/base/base.py”,第256行
返回自我。_cursor()
文件“/usr/local/lib/python3.7/site packages/django/db/backends/base/base.py”,第233行,在光标处
self.sure_连接()
文件“/usr/local/lib/python3.7/site packages/django/db/backends/base/base.py”,第217行,在连接中
self.connect()
文件“/usr/local/lib/python3.7/site packages/django/db/utils.py”,第89行,在__
使用exc_值的_回溯(回溯)提高dj_exc_值
文件“/usr/local/lib/python3.7/site packages/django/db/backends/base/base.py”,第217行,在连接中
self.connect()
文件“/usr/local/lib/python3.7/site packages/django/db/backends/base/base.py”,第195行,在connect中
self.connection=self.get_new_connection(连接参数)
文件“/usr/local/lib/python3.7/site packages/django/db/backends/postgresql/base.py”,第178行,在get\u new\u连接中
连接=数据库。连接(**连接参数)
文件“/usr/local/lib/python3.7/site packages/psycopg2/_init__.py”,第126行,在connect中
连接=连接(dsn,连接工厂=连接工厂,**kwasync)
django.db.utils.OperationalError:无法转换主机
名称“db”到地址:没有与主机名关联的地址
=================================================Docker编写文件=================================
版本:“3”
服务:
db:
图片:博士后:12
卷数:
-/home/--文件夹/data/postgres:/var/lib/postgresql/data的路径
重新启动:始终
环境:
POSTGRES_密码:POSTGRES
端口:
- "5432:5432"
网状物:
构建:/后端
命令:sh-c“python backend/manage.py makemigrations&&python backend/manage.py migrate&&python backend/manage.py runserver 0.0.0.0:8000”
#命令:python3 app/backend/manage.py runserver 0.0.0.0:8000
卷数:
-.:/backend
链接:
-分贝
端口:
- "8000:8000"
取决于:
-分贝
#前端:
#构建:/前端
#命令:serve-s build-l 3000
#卷数:
#-/前端:/app/前端
#端口:
# - "3000:3000"
#取决于:
#-分贝
卷数:
postgres_数据:
可能您的“db”在您添加“web”之前没有初始化,它将确保在加载web之前加载所有依赖项
在“web”服务添加中
depends_on:
- db