我有一个运行着django应用程序的容器,有时我进入该容器的外壳并运行./manage makemigrations
为我的应用程序创建迁移。
文件创建成功并在主机和容器之间同步。
但是,在我的主机上,我无法修改在容器中创建的任何文件。
这是我的Dockerfile
FROM python:3.8-alpine3.10
LABEL maintainer="Marek Czaplicki <marek.czaplicki>"
WORKDIR /app
COPY ./requirements.txt ./requirements.txt
RUN set -ex; \
apk update; \
apk upgrade; \
apk add libpq libc-dev gcc g++ libffi-dev linux-headers python3-dev musl-dev pcre-dev postgresql-dev postgresql-client swig tzdata; \
apk add --virtual .build-deps build-base linux-headers; \
apk del .build-deps; \
pip install pip -U; \
pip --no-cache-dir install -r requirements.txt; \
rm -rf /var/cache/apk/*; \
adduser -h /app -D -u 1000 -H uwsgi_user
ENV PYTHONUNBUFFERED=TRUE
COPY . .
ENTRYPOINT ["sh", "./entrypoint.sh"]
CMD ["sh", "./run_backend.sh"]
和run_backend.sh
./manage.py collectstatic --noinput
./manage.py migrate && exec uwsgi --strict uwsgi.ini
我该怎么做才能在主机中修改这些文件?我不想每次创建文件时都chmod
。
由于某种原因,有一个项目可以在主机中编辑容器中创建的文件,但是我发现这两者之间没有任何区别。
答案 0 :(得分:0)
通常在Docker容器内创建的文件归容器的根用户所有。
您可以在容器中尝试使用此方法
SodukuSolver
您可以将其作为chown 1000:1000 file-you-want-to-edit-outside
编辑:
如果您使用的是RUN
,则可以将docker-compose
添加到您的容器中:
user
让service:
container:
user: ${CURRENT_HOST_USER}
等于CURRENT_HOST_USER
答案 1 :(得分:0)
默认情况下,Docker容器以root身份运行。这有两个问题:
出于开发目的,docker run --user $(id -u) yourimage
或其他答案中给出的Compose示例会将用户与您的主机用户匹配。
要进行生产,您需要在图像内创建一个用户;有关详情,请参见上面链接的页面。
答案 2 :(得分:0)
解决方案是添加
USER uwsgi_user
到Dockerfile
,然后简单运行docker exec -it container-name sh