我目前正在尝试找出,如何配置docker-compose.yml
以允许Web服务器(django)与主机上运行的PostgreSQL数据库进行通信。
该应用程序可以在容器外部完美运行。
现在,我想创建一个容器,以提供更好的管理和部署功能。
我已经试过了
docker-compose.yml :
version: '3'
services:
web:
image: myimage
volumes:
- .:/appdir
environment:
- DB_NAME=test
- DB_USER=test
- DB_PASSWORD=test
- DB_HOST=localhost
command: python manage.py runserver 0.0.0.0:8000
ports:
- "8000:8000"
networks:
- mynet
networks:
mynet:
Dockerfile :
FROM python:3
ENV PYTHONUNBUFFERED=1 \
DJANGO_SETTINGS_MODULE=app.settings \
DEBUG=True \
SECRET_KEY=akey
WORKDIR /appdir
COPY . /appdir
EXPOSE 8000
RUN pip install -r requirements.txt
但是当我这样做时,出现以下错误:
web_1 | django.db.utils.OperationalError: could not connect to server: Connection refused
web_1 | Is the server running on host "localhost" (127.0.0.1) and accepting
web_1 | TCP/IP connections on port 5432?
谢谢
最佳答案
localhost
是相对的-在docker容器内部-localhost(aka 127.0.0.1)是指容器本身。如果要连接到主机,请给容器您的主机真实IP作为DB_HOST
。
找到主机IP的方法有很多,例如:
在您的终端hostname -I | awk '{print $1}'
中运行
关于django - 如何公开一个Docker容器访问主机数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55934504/