【发布时间】:2021-12-30 18:19:37
【问题描述】:
我有一个 docker-compose 文件,它使用 Dockerfile 来构建图像。在这张图片 (Dockerfile) 中,我创建了文件夹 /workspace,我想绑定 mount 以在本地文件系统中持久保存。
在 docker-compose up 之后,如果我绑定挂载,则该文件夹为空,但如果我不挂载该文件夹,一切正常(并且该文件夹存在我添加的所有文件)。
这是我的 docker-compose.yml:
version: "3.9"
services:
web:
build: .
command: uwsgi --ini /workspace/confs/uwsgi.ini --logger file:/workspace/logs/uswgi.log --processes 1 --workers 1 --plugins-dir=/usr/lib/uwsgi/plugins/ --plugin=python
environment:
- DB_HOST=db
- DB_NAME=***
- DB_USER=***
- DB_PASS=***
depends_on:
- db
- redis
- memcached
volumes:
- ./workspace:/workspace
networks:
- asyncmail
- traefik
# db, redis and memcached are ommited here
# aditional labels for traefik is also ommited
这是我的 Dockerfile:
FROM ubuntu:trusty
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
SHELL ["/bin/bash", "-c"]
RUN mkdir /workspace
RUN apt-get update -y && apt-get upgrade -y
RUN apt-get install -y redis-server python3-pip git-core postgresql-client
RUN apt-get install -y libpq-dev python3-dev libffi-dev libtiff5-dev zlib1g-dev libjpeg8-dev libyaml-dev libpython3-dev openssh-client uwsgi-plugin-python3 libpcre3 libpcre3-dev uwsgi-plugin-python
ADD myapp /workspace/
WORKDIR /workspace/src/
RUN /bin/bash -c "pip3 install cffi \
&& pip3 install -r /workspace/src/requirements.txt \
&& ./manage.py collectstatic --noinput"
RUN ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime
# CMD ["uwsgi", "--ini", "/workspace/confs/uwsgi.ini", "--logger", "file:/workspace/logs/uswgi.log"]
- 我知道有些项目可以优化,但是当我执行
docker-compose up -d时,会创建文件夹 ./workspace,其中只有一个名为src的文件夹。在容器内,/workspace 也只有这个空文件夹; - 如果我删除 docker-compose 中的 volumes 行,在容器内,文件夹 /workspace 包含我的应用程序的所有源代码。
我做错了什么无法绑定挂载工作区文件夹?
PS:我知道我正在使用的这张图片(ubuntu trusty)是旧的,但我的旧应用只能在这个版本上运行。
【问题讨论】:
-
如果您在容器目录上绑定挂载主机目录,则主机目录中存在的任何内容总是隐藏映像中构建的内容。这意味着您通常不希望将目录绑定到包含实际应用程序的目录上;也许你想要一个单独的
/workspace/data目录。
标签: docker ubuntu docker-compose dockerfile