Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何在Docker Compose中将目录从一个容器复制到另一个容器?_Django_Nginx_Docker_Docker Compose - Fatal编程技术网

Django 如何在Docker Compose中将目录从一个容器复制到另一个容器?

Django 如何在Docker Compose中将目录从一个容器复制到另一个容器?,django,nginx,docker,docker-compose,Django,Nginx,Docker,Docker Compose,我有两个docker compose服务nginx和django,在我的命令shell脚本中,我执行一个构建静态文件的gulp任务。构建过程完成后,我想执行copy命令将这些文件复制到nginx容器,但我不确定要使用哪个命令 docker-compose.yml gunicorn.sh 我猜我可以在gunicorn.sh中使用scp,但我不确定如何引用nginx服务的IP地址。仅在容器之间,不需要实际复制文件 有多种方法可以定义卷,但我想您不希望这些文件位于主机文件系统上 请尝试以下操作: vo

我有两个docker compose服务
nginx
django
,在我的
命令
shell脚本中,我执行一个构建静态文件的gulp任务。构建过程完成后,我想执行copy命令将这些文件复制到nginx容器,但我不确定要使用哪个命令

docker-compose.yml gunicorn.sh 我猜我可以在
gunicorn.sh
中使用scp,但我不确定如何引用
nginx
服务的IP地址。

仅在容器之间,不需要实际复制文件

有多种方法可以定义卷,但我想您不希望这些文件位于主机文件系统上

请尝试以下操作:

volumes:
  - static:

django:
  build:
    context: .
    dockerfile: ./compose/django/Dockerfile
  user: django
  depends_on:
    - postgres
    - redis
  command: /gunicorn.sh
  volumes:
    - static:/path/to/your/static/files
  env_file: .env

nginx:
  build: ./compose/nginx
  depends_on:
    - django
  volumes:
    - static:/some/dir/to/serve/files/from/
  ports:
    - "0.0.0.0:80:80"

然后配置nginx从
/some/dir/to/service/files/from/

为静态文件提供服务。我尝试在docker compose设置中为静态文件添加数据卷,但当gulp尝试在dest文件夹中写入(mkdir)时,我得到
错误:EACCES:permission denied,mkdir'/app/powerschool\u apps/static/public/css'
。如何确保我的数据卷权限正确?您必须使尝试写入卷的用户之间的UID匹配。这是唯一重要的事情。基本上,这只是安全性和可移植性之间的权衡。您可以在容器中设置非root用户,也可以在容器中使用root帐户。在第一种情况下,您牺牲了可移植性和UID不匹配的风险,在第二种情况下,如果潜在的攻击者以某种方式进入容器并使用其中一个公开的服务,您将为他提供更多的选择。相关讨论:我最后要做的是在我的django Dockerfile中添加
RUN chown django:django/path/to/your/static/files
。为什么要这么复杂?只需将nginx添加到django。一个容器,无需担心同步。或者,您可以为其设置一个卷(非共享)both@ShawnC. 好问题。我是从开始的,所以我只是在使用他们给我的东西,但我可以把它简化为一个容器。
#!/bin/sh
gulp build
python manage.py migrate
/usr/local/bin/gunicorn config.wsgi -w 4 -b 0.0.0.0:5000 --chdir=/app
volumes:
  - static:

django:
  build:
    context: .
    dockerfile: ./compose/django/Dockerfile
  user: django
  depends_on:
    - postgres
    - redis
  command: /gunicorn.sh
  volumes:
    - static:/path/to/your/static/files
  env_file: .env

nginx:
  build: ./compose/nginx
  depends_on:
    - django
  volumes:
    - static:/some/dir/to/serve/files/from/
  ports:
    - "0.0.0.0:80:80"