我有一個 docker-compose 檔案,它使用 Dockerfile 來構建影像。在此影像 (Dockerfile) 中,我創建了一個檔案夾/workspace,我希望將掛載系結到本地檔案系統中的持久性。
在 docker-compose up 之后,如果我系結 mount,該檔案夾為空,但如果我不掛載此檔案夾,一切正常(并且該檔案夾與我添加的所有檔案一起存在)。
這是我的 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 中的卷行,在容器內,檔案夾 /workspace 包含我的應用程式的所有源代碼。
我做錯了什么,我無法系結安裝作業區檔案夾?
PS:我知道我使用的這個影像(ubuntu trusty)是舊的,但我的舊應用程式只能在這個版本上運行。
uj5u.com熱心網友回復:
我是否正確假設您要出現在作業區中的檔案實際上位于主機中名為“myapp”的檔案夾中(從這一行看來是這樣)
ADD myapp /workspace/
我想你打算把它映射到你的 docker 容器中,所以在卷下
volumes:
- ./myapp:/workspace
卷映射以一種方式作業,即容器內的檔案夾被主機上映射檔案夾的內容替換,而不是相反......
uj5u.com熱心網友回復:
我最終將源代碼目錄添加到容器中以解決此問題。@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-compose 更改為以下最終版本:
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重新啟動容器。新版本已經在那里了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/399431.html
標籤:码头工人 乌本图 docker-compose 文件
