Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.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
问题构建Django+;Windows 10上Docker中的PostgreSQL容器_Postgresql_Docker - Fatal编程技术网

问题构建Django+;Windows 10上Docker中的PostgreSQL容器

问题构建Django+;Windows 10上Docker中的PostgreSQL容器,postgresql,docker,Postgresql,Docker,我创建了dockerfile: FROM python:3 ENV PYTHONUNBUFFERED=1 WORKDIR /code/ COPY requirements.txt /code/ RUN pip install -r requirements.txt COPY . /code/ 和docker-compose.yml version: "3.9" services: db: image: postgres volumes: -

我创建了dockerfile:

FROM python:3
ENV PYTHONUNBUFFERED=1
WORKDIR /code/
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
和docker-compose.yml

version: "3.9"

services:
  db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_HOST_AUTH_METHOD=trust
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    networks:
      - djangonetwork
  web:
    build: D:/djangoProject/phonerep/Docker/
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
       - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
    links:
      - db:db
    networks:
      - djangonetwork
networks:
      djangonetwork:
          driver: bridge
但在docker控制台中启动web容器时出错:

web_1 | connection=数据库.connect(**连接参数)
web_1 |文件“/usr/local/lib/python3.9/site packages/psycopg2/init.py”,第127行,在connect
网络连接=连接(dsn,连接工厂=连接工厂,**kwasync)
web_1 | django.db.utils.OperationalError:无法将主机名“db”转换为地址:名称解析暂时失败

当您使用PostgreSQL启动容器时:

db|u 1 | 2021-04-22 08:51:15.580 UTC[85]致命:数据目录“/var/lib/postgresql/data”具有无效权限
db|u 1 | 2021-04-22 08:51:15.580 UTC[85]详细信息:权限应为u=rwx(0700)或u=rwx,g=rx(0750)。
db_1|子进程已退出,退出代码为1
db_1|initdb:删除数据目录“/var/lib/postgresql/data”的内容
db_1|正在运行引导脚本。。。phonerep_db_1已退出,代码为1

设置内容:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}
我正试图在Widnows 10上运行这一切,不幸的是,到目前为止,我无法将开发平台更改为类似Linux的系统。

请告诉我如何解决此问题。

我显示您的设置是硬编码的: 我认为您应该使用放置在docker compose文件中的变量对其进行配置 就像这样:

数据库={
“默认值”:{
“引擎”:“django.db.backends.postgresql_psycopg2”,
“名称”:os.environ['POSTGRES_DB'],
“用户”:os.environ['POSTGRES_USER'],
“密码”:os.environ['POSTGRES_PASSWORD'],
“主机”:os.environ['POSTGRES_DB_SERVICE'],
“端口”:os.environ['POSTGRES_PORT']
}
}
并向docker中添加如下内容:

版本:“3.9”
服务:
db:
图片:博士后
卷数:
-./data/db:/var/lib/postgresql/data
环境:
-POSTGRES\u HOST\u AUTH\u METHOD=信任
-POSTGRES_DB=POSTGRES
-POSTGRES\u USER=POSTGRES
-POSTGRES\u密码=POSTGRES
网络:
-Django网络
网状物:
构建:D:/djangoProject/phonerep/Docker/
命令:python manage.py runserver 0.0.0.0:8000
环境:
-POSTGRES\u HOST\u AUTH\u METHOD=信任
-POSTGRES_DB=POSTGRES
-POSTGRES\u USER=POSTGRES
-POSTGRES\u密码=POSTGRES
-POSTGRES_PORT=5432#添加数据库端口
-POSTGRES_DB_SERVICE=DB#添加数据库主机
卷数:
-.:/code
端口:
- "8000:8000"
取决于:
-分贝
链接:
-分贝:分贝
网络:
-Django网络
网络:
Django网络:
司机:驾驶台
但在此之前,请确保您可以使用

$docker exec-it postgres\u container/bin/sh
$psql
---我会问你密码
您可以按照此链接显示如何使用
我认为这可以帮助您解决问题

如果Postgres不起作用,您需要遵循以下步骤:

  • 配置docker compose以使用postgresql容器

  • 登录到postgresql容器

  • 尝试创建一个表

  • 如果所有步骤都正常,您可以在末尾添加django部分

    使用Docker compose创建Postgresql容器:
    版本:“3”
    服务:
    数据库:
    图片:“postgres”#使用最新官方postgres版本
    环境文件:
    -database.env#配置postgres
    卷数:
    -数据库数据:/var/lib/postgresql/data/#即使容器关闭卷,也会保留数据:
    数据库数据:#使用docker compose可以更轻松地管理命名卷
    
    database.env文件如下所示:

    #database.env
    POSTGRES_用户=独角兽_用户
    POSTGRES_密码=神奇的密码
    POSTGRES_DB=rainbow_数据库
    
    登录到PostgreSQL
    docker编写
    
    连接到数据库:
    docker编写运行数据库bash
    数据库#psql--host=database--username=unicorn_user--dbname=rainbow_数据库
    
    我为您尝试了它,您可以看到,所有这些都正常工作:


    我希望这能帮助您解决问题。

    问题在于postgres容器没有启动,只有django容器启动。从这里开始,使用postgres进入容器将不起作用。不幸的是,您的代码对我没有帮助