docker compose-不能在使用BUILD时创建的文件夹中使用绑定挂载



我有一个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来重新启动容器。新版本已经存在

最新更新