我正在尝试在Docker容器中启动django应用
docker-compose.yml
version: '3.8'
services:
api:
build:
context: .
dockerfile: ./Dockerfile-local
ports:
- "8000:8000"
entrypoint: ./entrypoint-local.sh
env_file:
- .env-local
links:
- postgresql
postgresql:
image: postgres:12.4
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_DB=frov_db
- POSTGRES_PASSWORD=postgres
- POSTGRES_HOST=postgresql
- POSTGRES_PORT=5432
- PGDATA=/var/lib/postgresql/data/pgdata
- C_FORCE_ROOT=true
ports:
- '5433:5432'
Dockerfile本地FROM python:3.8-slim
ENV PYTHONDONTWRITEBYTECODE 1
WORKDIR /usr/src/app
COPY Pipfile.lock Pipfile ./
RUN pip install -U setuptools pip pipenv && pipenv install --system --deploy --ignore-pipfile --dev
COPY . .
RUN touch /var/log/filebeat.log && chmod 664 /var/log/filebeat.log \
&& chmod +x ./entrypoint-local.sh
entrypoint-local.sh #!/bin/bash
python manage.py collectstatic --no-input --settings frov.settings.default
python manage.py migrate --settings frov.settings.default
python manage.py seed
gunicorn -b 0.0.0.0:8000 --workers=1 --env DJANGO_SETTINGS_MODULE=frov.settings.default frov.wsgi:application
.env-本地DEBUG=True
DJANGO_SETTINGS_MODULE=frov.settings.default
DB_NAME=frov_db
DB_USER=postgres
DB_PASS=postgres
DB_HOST=postgresql
DB_PORT=5433
现在我有了主意,为什么会出现这样的错误api_1 | psycopg2.OperationalError: could not connect to server: Connection refused
api_1 | Is the server running on host "postgresql" (172.21.0.2) and accepting
api_1 | TCP/IP connections on port 5433?
谁能帮助我?我只是不知道哪里可能发生错误
最佳答案
ports:
- '5433:5432'
将5432
容器端口公开到5433
主机端口。但是,在docker网络中,仍然可以通过5432
端口访问数据库,因此您需要更改.env
文件以使用5432
端口。如果您不需要其他应用程序即可从主机访问数据库,则可以完全忽略此
ports
部分(您仍然可以使用docker-compose exec
与其连接)
关于django - 为什么我的Django应用程序无法连接到docker内部的postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64630266/