我正在使用 docker 背景關系將我的本地容器部署到我的 debian 網路服務器。我在 Windows 10 上使用適用于 Windows 的 Docker 桌面。該應用程式是使用 Flask 撰寫的。
在某些時候,我在“docker context use remote”之后嘗試了“docker-compose up --build”,但出現以下錯誤:
來自守護程式的錯誤回應:無效的卷規范:'C:\Users\user\fin:/fin:rw'
當我嘗試將它部署到生產服務器時,本地一切正常,錯誤彈出。
Dockerfile 如下所示:
FROM python:3.8-slim-buster
ENV INSTALL_PATH /app
RUN mkdir -p $INSTALL_PATH
WORKDIR $INSTALL_PATH
ENV PATH="/home/user/.local/bin:${PATH}"
COPY . ./
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
RUN useradd -ms /bin/bash user && chown -R user $INSTALL_PATH
USER user
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
RUN pip install --upgrade pip
CMD gunicorn -c "python:config.gunicorn" "fin.app:create_app()"
而 docker-compose.yml 的摘錄如下所示:
version: '3.8'
services:
flask-app:
container_name: flask-app
restart: always
build: .
command: >
gunicorn -c "python:config.gunicorn" "fin.app:create_app()"
environment:
PYTHONUNBUFFERED: 'true'
volumes:
- '.:/fin'
ports:
- 8000:8000
env_file:
- '.env'
在 .env 檔案中設定了 COMPOSE_CONVERT_WINDOWS_PATHS=1 選項。
在某些時候,我在安裝了 Ubuntu 的情況下使用 WSL2 嘗試了相同的程序,這導致了以下訊息:
Error response from daemon: create \\wsl.localhost\Ubuntu-20.04\home\user\fin: "\\\\wsl.localhost\\Ubuntu-20.04\\home\\user\\fin" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path
根據此訊息,我將 Dockerfile 更改為:
FROM python:3.8-slim-buster
ENV INSTALL_PATH=/usr/src/app
RUN mkdir -p $INSTALL_PATH
WORKDIR $INSTALL_PATH
ENV PATH=/home/user/.local/bin:${PATH}
COPY . /usr/src/app/
# set environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
#ENV COMPOSE_CONVERT_WINDOWS_PATHS=1
RUN useradd -ms /bin/bash user && chown -R user $INSTALL_PATH
USER user
COPY requirements.txt /usr/src/app/requirements.txt
RUN pip install -r requirements.txt
RUN pip install --upgrade pip
CMD gunicorn -c "python:config.gunicorn" "fin.app:create_app()"
但是錯誤仍然存??在,我必須知道如何解決它。
預先感謝您的幫助。
uj5u.com熱心網友回復:
使用這個(沒有引號和斜杠,所以它知道你的意思是這個檔案夾):
volumes:
- ./:/fin
uj5u.com熱心網友回復:
您C:\Users\user\fin:/fin:rw在生產環境中收到無效的卷規范:“ ”是因為主機路徑C:\Users\user\fin不可用。您可以在部署時將其洗掉或將其更改為生產環境中可用的絕對路徑,如下所示。
volumes:
- '/root:/fin:rw'
其中 /root 是我的生產環境中可用的目錄。
/path:/path/in/container mounts the host directory, /path at the /path/in/container
path:/path/in/container creates a volume named path with no relationship to the host.
注意開頭的斜線。如果/存在,它將被視為主機目錄,否則將被視為卷
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/323208.html
標籤:码头工人 docker-compose 文件 运维 相对路径
