我有一个使用Docker Compose创建的Django环境,我正在尝试manage.py collectstatic将我的站点的静态文件复制到容器中的目录.这个目录(/ usr/src/app/static)也是一个Docker Volume.
在构建我的docker containers(docker-compose build)之后,我运行docker-compose run web python manage.py collectstatic,它按预期工作,但我的Web服务器(Nginx)没有找到文件,我运行时也没有任何文件docker-compose run web ls -la /usr/src/app/static.
关于我做错了什么的任何想法?
(注意:manage.py collectstatic我的Dockerfile中没有,因为我的设置需要加载我的".env"文件,我没有看到在Dockerfile中加载它的方法.在任何一种情况下,我想知道为什么Docker Compose不起作用,因为我期待它.)
这是我的配置文件:
## docker-compose.yml:
web:
restart: always
build: .
expose:
- "8000"
links:
- postgres:postgres
volumes:
- /usr/src/app/static
- .:/code
env_file: .env
command: /usr/local/bin/gunicorn myapp.wsgi:application -w 2 -b :8000 --reload
nginx:
restart: always
build: ./config/nginx
ports:
- "80:80"
volumes:
- /www/static
volumes_from:
- web
links:
- web:web
postgres:
restart: …Run Code Online (Sandbox Code Playgroud) 这里有很多关于我经历过的类似问题的问题,比如这个、这个、这个和这个非常相似,但那里的解决方案都没有解决我的问题。请不要关闭这个问题。
我在 docker 上使用 nginx 和 postgres 运行 django。机密信息存储在 .env 文件中。我的 postgres 数据没有持久化docker-compose up/start和docker-compose down/stop/restart。
这是我的docker-compose文件:
version: '3.7'
services:
web:
build: ./app
command: gunicorn umngane_project.wsgi:application --bind 0.0.0.0:8000
volumes:
- ./app/:/usr/src/app/
expose:
- 8000
environment:
- SECRET_KEY=${SECRET}
- SQL_ENGINE=django.db.backends.postgresql
- SQL_DATABASE=postgres
- SQL_USER=${POSTGRESQLUSER}
- SQL_PASSWORD=${POSTGRESQLPASSWORD}
- SQL_HOST=db
- SQL_PORT=5432
- SU_NAME=${SU_NAME}
- SU_EMAIL=${SU_EMAIL}
- SU_PASSWORD=${SU_PASSWORD}
depends_on:
- db
db:
image: postgres:11.2-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
nginx:
build: …Run Code Online (Sandbox Code Playgroud)