Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python docker网络未将我的服务连接在一起_Python_Django_Postgresql_Docker Compose_Dockerfile - Fatal编程技术网

Python docker网络未将我的服务连接在一起

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=====

我遇到docker network无法将我的服务连接在一起的问题,我有一个postgres映像和一个python映像需要它们连接,但在我从python服务调用连接到postgres服务时,我的连接被拒绝。我尝试打开端口5432和所有主机,查看是否可以获得任何连接,但同样的错误也会发生,我尝试使用服务名称连接到端口5432和所有主机,同样的问题仍在发生。有人知道为什么吗

=========================================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