【问题标题】:How do I copy a directory from one container to another container in Docker Compose?如何在 Docker Compose 中将目录从一个容器复制到另一个容器?
【发布时间】:2017-09-09 22:26:48
【问题描述】:

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

docker-compose.yml

django:
  build:
    context: .
    dockerfile: ./compose/django/Dockerfile
  user: django
  depends_on:
    - postgres
    - redis
  command: /gunicorn.sh
  env_file: .env

nginx:
  build: ./compose/nginx
  depends_on:
    - django

  ports:
    - "0.0.0.0:80:80"

gunicorn.sh

#!/bin/sh
gulp build
python manage.py migrate
/usr/local/bin/gunicorn config.wsgi -w 4 -b 0.0.0.0:5000 --chdir=/app

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

【问题讨论】:

  • 为什么要复杂呢?只需将 nginx 添加到 django 即可。一个容器,无需担心同步。或者您可以为两者提供一个卷(非共享)
  • @ShawnC。好问题。我从cookiecutter-django 开始,所以我只是在使用他们给我的东西,但我可能会将其简化为一个容器。

标签: django nginx docker docker-compose


【解决方案1】:

容器之间只需share volumes,无需实际复制文件。

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

尝试以下方法:

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/serve/files/from/ 提供静态文件。

【讨论】:

  • 我尝试在我的 docker-compose 设置中为我的静态文件添加一个数据卷,但是当 gulp 尝试在 dest 文件夹中写入 (mkdir) 时,我得到了 Error: EACCES: permission denied, mkdir '/app/powerschool_apps/static/public/css'。如何确保我的数据卷权限正确?
  • 您必须在尝试写入卷的用户之间设置 UID。这是唯一重要的事情。
  • 基本上这只是安全性和便携性之间的权衡。您要么在容器中设置非 root 用户,要么在容器中使用 root 帐户。在第一种情况下,您牺牲了 UID 不匹配的风险的可移植性,在第二种情况下,如果潜在的攻击者以某种方式进入具有暴露服务之一的容器,则您为潜在的攻击者提供了更多选择。相关讨论:forums.docker.com/t/root-user-or-non-root-user-inside-container/…
  • 我最终要做的是在我的 django Dockerfile 中添加 RUN chown django:django /path/to/your/static/files
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
  • 2020-08-02
相关资源
最近更新 更多