问题构建Django+;Windows 10上Docker中的PostgreSQL容器
我创建了dockerfile:问题构建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: -
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不起作用,您需要遵循以下步骤:
版本:“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进入容器将不起作用。不幸的是,您的代码对我没有帮助