我有一个docker compose文件,它使用Dockerfile来构建图像。在这个映像(Dockerfile(中,我创建了文件夹/workspace
,我想将其绑定到本地文件系统中以实现持久性。
在docker组合之后,如果我绑定挂载,文件夹是空的,但如果我不挂载这个文件夹,一切都很好(文件夹与我添加的所有文件一起存在(。
这是我的码头组合。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
文件夹时/工作空间只创建了一个名为src
的文件夹。在容器内,/workspace也只有这个空文件夹 - 如果我删除docker compose中的volumes行,在容器内,文件夹/工作区将拥有我的应用程序的所有源代码
我做错了什么,无法绑定装载工作区文件夹?
附言:我知道我使用的这个图片(ubuntu trusty(很旧,但我的旧应用程序只运行这个版本。
我假设您想在工作区中显示的文件实际上在一个名为"的文件夹中,这是正确的吗;myapp";在您的主机中(从这条线来看似乎是这样(
ADD myapp /workspace/
我想你是想把它映射到你的码头集装箱里,所以在下
volumes:
- ./myapp:/workspace
卷映射的工作方式是一种,即容器中的文件夹被主机上映射文件夹的内容替换,而不是另一种方式。。。
我最终在容器中添加了源代码目录来解决这个问题@NiRR的回答帮助很大。
最后的Dockerfile是更改为不在图像中包含源代码:
FROM ubuntu:trusty
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ARG DEBIAN_FRONTEND=noninteractive
SHELL ["/bin/bash", "-c"]
RUN apt-get update -y && apt-get upgrade -y
RUN apt-get install -y 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
WORKDIR /workspace/src
COPY myapp/src/requirements.txt .
RUN /bin/bash -c "pip3 install cffi
&& pip3 install -r requirements.txt"
# To set timezone
RUN ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime
我把docker组件改为以下最终版本:
version: "3.9"
services:
web:
build: .
command: ./start.sh
environment:
- DB_HOST=db
- DB_NAME=***
- DB_USER=***
- DB_PASS=***
volumes:
- ./myapp:/workspace
- 现在在容器启动中,myapp的所有源代码都被复制到容器内
- 一切都在GIT的控制之下
- 如果代码发生更改,我们可以进行推/拉和
docker-compose up -d
来重新启动容器。新版本已经存在