远程服务器上的 Docker 上下文“来自守护程序的错误响应:无效的卷规范”

jay*_*5on 5 relative-path docker dockerfile docker-compose devops

我正在使用 docker context 将本地容器部署到我的 debian Web 服务器。我在 Windows 10 上使用 Docker Desktop for Windows。该应用程序是使用 Flask 编写的。

\n

在某些时候,我在 \xe2\x80\x9cdocker 上下文使用远程\xe2\x80\x9d 之后尝试了 \xe2\x80\x9cdocker-compose up --build\xe2\x80\x9d ,并且收到以下错误:

\n

来自守护程序的错误响应:无效的卷规范:\xe2\x80\x98C:\\Users\\user\\fin:/fin:rw\xe2\x80\x99

\n

当我尝试将其部署到生产服务器时,本地一切正常,但会弹出错误。

\n

Dockerfile 如下所示:

\n
FROM python:3.8-slim-buster\n\nENV INSTALL_PATH /app\nRUN mkdir -p $INSTALL_PATH\nWORKDIR $INSTALL_PATH\n\nENV PATH="/home/user/.local/bin:${PATH}"\n\nCOPY . ./\n\n# set environment variables\nENV PYTHONDONTWRITEBYTECODE 1\nENV PYTHONUNBUFFERED 1\n\nRUN useradd -ms /bin/bash user && chown -R user $INSTALL_PATH\nUSER user\n\nCOPY requirements.txt requirements.txt\nRUN pip install -r requirements.txt\n\nRUN pip install --upgrade pip\n\nCMD gunicorn -c "python:config.gunicorn" "fin.app:create_app()"\n
Run Code Online (Sandbox Code Playgroud)\n

docker-compose.yml 的摘录如下所示:

\n
version: '3.8'\n\nservices:\n  flask-app:\n    container_name: flask-app\n    restart: always\n    build: .\n    command: >\n      gunicorn -c "python:config.gunicorn" "fin.app:create_app()"\n    environment:\n      PYTHONUNBUFFERED: 'true'\n    volumes:\n      - '.:/fin'\n    ports:\n      - 8000:8000\n    env_file:\n      - '.env'\n
Run Code Online (Sandbox Code Playgroud)\n

在 .env 文件中设置选项\nCOMPOSE_CONVERT_WINDOWS_PATHS=1。

\n

在某些时候,我在安装了 Ubuntu 的情况下使用 WSL2 尝试了相同的过程,这导致了以下消息:

\n
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\n
Run Code Online (Sandbox Code Playgroud)\n

根据此消息,我将 Dockerfile 更改为:

\n
FROM python:3.8-slim-buster\n\nENV INSTALL_PATH=/usr/src/app\nRUN mkdir -p $INSTALL_PATH\nWORKDIR $INSTALL_PATH\n\nENV PATH=/home/user/.local/bin:${PATH}\n\nCOPY . /usr/src/app/\n\n# set environment variables\nENV PYTHONDONTWRITEBYTECODE=1\nENV PYTHONUNBUFFERED=1\n#ENV COMPOSE_CONVERT_WINDOWS_PATHS=1\n\nRUN useradd -ms /bin/bash user && chown -R user $INSTALL_PATH\nUSER user\n\nCOPY requirements.txt /usr/src/app/requirements.txt\nRUN pip install -r requirements.txt\n\nRUN pip install --upgrade pip\n\nCMD gunicorn -c "python:config.gunicorn" "fin.app:create_app()"\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

预先感谢您的帮助。

\n

Liq*_*ath 3

您在生产环境中收到无效的卷规范: \xe2\x80\x98 C:\\Users\\user\\fin:/fin:rw\xe2\x80\x99 是因为主机路径C:\\Users\\user\\fin不可用。您可以在部署时将其删除,或将其更改为生产环境中可用的绝对路径,如下所示。

\n
volumes:\n    - '/root:/fin:rw'\n
Run Code Online (Sandbox Code Playgroud)\n

其中 /root 是我的生产环境中可用的目录。

\n
 /path:/path/in/container mounts the host directory, /path at the /path/in/container\n\n path:/path/in/container creates a volume named path with no relationship to the host.\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n