我用绑定主机的docker启动了一个Django应用程序来处理用户上传,但现在我想迁移到命名卷,但我的主机上已经有文件了,所以我想知道如何将文件从主机复制到卷,这是我的web容器的docker-compose:
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:
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吗?
另外,如何备份卷中的文件?
发布于 2021-08-24 14:56:09
你可以这样做:
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创建装载了命名卷的临时容器
docker run -d --rm --name temp -v django-media:/root alpine tail -f /dev/null然后将所有文件复制到临时容器卷(./run/media/.将里面的所有文件/文件夹复制到目标目录/root)
docker cp ./run/media/. temp:/root 然后停止临时容器
docker stop temp现在文件被复制了,但没有正确的权限,执行容器内的一个终端,挂载指定的卷,移动到目录并运行chown来拥有复制的文件,在这种情况下,我认为容器内的文件属于根目录,并且复制的文件属于不同的用户,您可以使用ls -la命令进行检查。
docker exec -it --user root web /bin/bash
chown -R root:root /run/mediahttps://stackoverflow.com/questions/68779725
复制相似问题