我正在尝试在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-local
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?
有人能救我吗?我只是不知道错误会在哪里发生
答案 0 :(得分:1)
ports:
- '5433:5432'
将5432
容器端口暴露于5433
主机端口。但是,在docker网络中,仍可以通过5432
端口访问数据库,因此您需要更改.env
文件以使用5432
端口。
如果您不需要其他应用程序即可从主机访问数据库,则可以完全忽略此ports
部分(您仍然可以使用docker-compose exec
连接到该部分)>