首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将文件从主机复制到docker命名卷

如何将文件从主机复制到docker命名卷
EN

Stack Overflow用户
提问于 2021-08-14 01:40:03
回答 1查看 345关注 0票数 0

我用绑定主机的docker启动了一个Django应用程序来处理用户上传,但现在我想迁移到命名卷,但我的主机上已经有文件了,所以我想知道如何将文件从主机复制到卷,这是我的web容器的docker-compose:

代码语言:javascript
复制
version: '3'
services:
  db:
    restart: always
    image: "postgres:13.2-alpine"
    container_name: db
    ports:
      - "5432:5432"
    env_file:
      - ./.env.dev
    volumes:
      - ./pgdata:/var/lib/postgresql/data
  web:
      container_name: web
      restart: always
      build:
        context: .
        dockerfile: ./docker/development/Dockerfile
      environment:
        DEBUG: 'true'
        DJANGO_SETTINGS_MODULE: myapp.app_settings.development
      command: sh ./docker/development/runserver.sh
      ports:
        - "8000:8000"
      env_file:
        - ./.env.dev
      volumes:
        - .:/app # Enable code reload
        - django-static:/app/run/static
        - django-media:/app/run/media
      depends_on:
        - db

volumes:
  django-static:
  django-media:

这是我的Dockerfile:

代码语言:javascript
复制
FROM python:3.8
ENV PYTHONUNBUFFERED 1
RUN mkdir /app
WORKDIR /app
COPY ./requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
# COPY . /app
ADD . /app

RUN apt-get clean && apt-get update && apt install -y netcat

COPY ./docker/development/entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]

有一种方法可以将我上传的内容从host: /home/art/myapp/run/media和/home/art/myapp/run/static复制到卷django-static和django-media吗?

另外,如何备份卷中的文件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-24 14:56:09

你可以这样做:

代码语言:javascript
复制
docker run -d --rm --name temp -v django-media:/root alpine tail -f /dev/null
docker cp ./run/media/. temp:/root 
docker stop temp
docker exec -it --user root web /bin/bash
chown -R root:root /run/media

创建装载了命名卷的临时容器

代码语言:javascript
复制
docker run -d --rm --name temp -v django-media:/root alpine tail -f /dev/null

然后将所有文件复制到临时容器卷(./run/media/.将里面的所有文件/文件夹复制到目标目录/root)

代码语言:javascript
复制
docker cp ./run/media/. temp:/root 

然后停止临时容器

代码语言:javascript
复制
docker stop temp

现在文件被复制了,但没有正确的权限,执行容器内的一个终端,挂载指定的卷,移动到目录并运行chown来拥有复制的文件,在这种情况下,我认为容器内的文件属于根目录,并且复制的文件属于不同的用户,您可以使用ls -la命令进行检查。

代码语言:javascript
复制
docker exec -it --user root web /bin/bash
chown -R root:root /run/media
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68779725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档