我有一个django项目的docker-compose文件试图使用位于主机上的数据库。
现在我的Dockerfile是:
ExecutorService.scheduleAtFixedRate()
搬运工-compose.yml:
FROM python:3-slim
ENV PYTHONUNBUFFERED 1
RUN mkdir /code.
WORKDIR /code
ADD . /code/
RUN pip install -r requirements.txt
RUN export dockerhost=$(docker-machine ip)
settings.py中的 version: "2"
networks:
workernetwork:
webnetwork:
services:
static:
volumes:
- /static:/static
- /media:/media
image: alpine:latest
web:
build: .
command: bash -c "SECRET_KEY=temp_value python /code/manage.py collectstatic --noinput && python /code/manage.py migrate && /code/run_gunicorn.sh"
volumes:
- .:/code
volumes_from:
- static
env_file:
- secrets.env
ports:
- 443:443
networks:
- webnetwork
extra_hosts:
- "dockerhost:${dockerhost}"
:
DATABASES
我做错了什么?
请注意!
答案 0 :(得分:0)
我有同样的问题。问题是netwrok之间的连接被阻止了。我通过创建一个具有桥名称的网络来修复它:
docker network create \
--driver bridge \
--opt "com.docker.network.bridge.name"="docker_webnetwork" \
webnetwork
我正在使用UFW作为我的防火墙。因此,允许我创建的网络连接到postegres端口。
sudo ufw allow in on docker_webnetwork to any port 5432
然后,您可以使用webnetwork连接到主机的postgresql
要获取主机IP,我添加:
export DOCKERHOST=$(ip route | awk '/^default via /{print $3}')
在需要访问数据库的服务命令中。
答案 1 :(得分:0)
最后用docker volume解决:
首先,创建音量:
label = Label(canvas, image=image)
...
dnd = DragManager()
dnd.add_dragable(label)
...
root.mainloop()
搬运工-compose.yml
docker volume create --name=coredb
.env变量:
version: "2"
services:
...
web:
build:
context: .
command: bash -c "python /code/manage.py collectstatic --noinput && python /code/manage.py migrate && /code/run_gunicorn.sh"
volumes:
- /static:/data/web/static
- /media:/data/web/media
- .:/code
env_file:
- ../.env
depends_on:
- db
db:
restart: always
image: postgres
env_file:
- ../.env
volumes:
- pgdata: /var/lib/postgresql/data
volumes:
pgdata:
external:
name: coredb
重要的:
您需要通过POSTGRES_DB={hidden}
POSTGRES_USER={hidden}
POSTGRES_PASSWORD={hidden}
并按照this说明手动创建数据库和用户,直到docker exec -it backend_db_1 bash
章