【问题标题】:Docker context on remote server “Error response from daemon: invalid volume specification”远程服务器上的 Docker 上下文“来自守护程序的错误响应:无效的卷规范”
【发布时间】:2021-10-17 16:31:21
【问题描述】:

我正在使用 docker 上下文将我的本地容器部署到我的 debian 网络服务器。我在 Windows 10 上使用 Docker Desktop for Windows。该应用程序是使用 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()"

但错误仍然存​​在,我必须知道如何解决它。

提前感谢您的帮助。

【问题讨论】:

    标签: docker docker-compose dockerfile devops relative-path


    【解决方案1】:

    您在生产环境中收到无效的卷规范:“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.
    

    注意开头的斜线。如果/ 存在,它将被视为主机目录,否则将被视为卷

    【讨论】:

    • 非常感谢,将卷更改为“- '/root:/fin:rw'” 成功了,非常感谢您的解释。
    【解决方案2】:

    使用这个(不带引号和斜线,这样它就知道你的意思是这个文件夹):

    volumes:
        - ./:/fin
    

    【讨论】:

      猜你喜欢
      • 2020-06-09
      • 1970-01-01
      • 2023-03-03
      • 2023-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      相关资源
      最近更新 更多