【问题标题】:Trying to mount a host volume on a Docker container on Windows. What is the source folder relative to?尝试在 Windows 上的 Docker 容器上挂载主机卷。源文件夹相对于什么?
【发布时间】:2020-12-01 10:27:47
【问题描述】:

我在尝试将卷安装到我的 docker 容器时遇到问题。

这是我的项目结构

cloudRun
  distService/
    index.js
  Dockerfile
  package.json    // THIS IS THE package.json FOR THE DOCKER IMAGE

package.json      // THIS IS MY MAIN PROJECT package.json

在我的主项目package.json 我有以下脚本:

"docker-run": "./scripts/docker/docker-run.sh",
"docker-inspect": "docker exec -ti hello-world sh"   // THIS IS USED TO INSPECT THE RUNNING CONTAINER

docker-run.sh

// STOPS ALL CONTAINERS
// REMOVES ALL CONTAINERS
// REMOVES ALL IMAGES

// BUILDS A NEW IMAGE FROM SCRATCH
docker build --tag hello-world:latest ./cloudRun

// TRYING TO RUN THE CONTAINER WITH A MOUNTED /distService VOLUME
docker run --name hello-world -p 3000:3000 -v //distService:/distService hello-world:latest

这是Dockerfile

FROM node:12-slim

WORKDIR /

COPY ./package.json ./package.json

RUN npm install

ENTRYPOINT npm start

一切正常。除了容器将/distService 视为一个空文件夹这一事实。

我知道这一点是因为当我打开一个新的终端窗口并运行时:

npm run docker-inspect

我可以进入文件夹和ls 他们。这就是我得到的:有一个distService 文件夹,但ls 命令返回为空。 PS:我在node_modules 上做了一个ls 只是为了表明它有效,而distService 确实是空的。

问题

当我通过-v //folder:/folder 时,源文件夹相对于什么?如何确定我选择了正确的文件夹?

环境:

Windows 10.
Docker for Windows installed
Docker Engine v19.03.13

更新

我运行容器并检查它:docker inspect <CONTAINER_ID> 以查看正在挂载的文件夹。但这并没有太大帮助。这是回来的:

"HostConfig": {
  "Binds": [
    "//distService/:/distService/"
],

// OTHER STUFF

"Mounts": [
  {
    "Type": "bind",
    "Source": "/distService",         // WHAT IS THIS PATH RELATIVE TO ?
    "Destination": "/distService",
    "Mode": "",
    "RW": true,
    "Propagation": "rprivate"
  }
],

【问题讨论】:

    标签: docker dockerfile docker-volume docker-run


    【解决方案1】:

    docker run 的本地文件夹路径总是相对于根目录。 要获取相对路径,请使用 PWD 环境变量:

    docker run -v $(PWD)/folder:/folder ...

    或者,如果它们以句点开头,docker-compose 确实支持相对路径:

    version: '3.8'
    
    services:
      nginx:
        image: nginx
        volumes:
        - ./folder:/www
    
    

    【讨论】:

    • docker run -v $(PWD)/folder:/folder ... 不工作。至少在 Windows 上没有。尚未使用docker-compose 进行测试。
    • 啊。自从我使用 Windows 以来已经有一段时间了。不记得包含当前目录的 env 变量 - 它可能会有所不同并且可能包含空格,因此将所有内容包装在 ""s 中很重要。
    【解决方案2】:

    这是我必须做的。

    基本上我必须输入从c:/ 开始的完整绝对路径。

    -v c:/Users/my-user/my-project/distService:/distService
    

    完整命令:

    docker run --name hello-world -p 3000:3000 -v c:/Users/USER/my-project/distService:/distService hello-world:latest
    

    我是在official docs 上找到这个想法后想到的:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多