首页 > 解决方案 > Docker-compose.yml Volummes: 和 -mount 命令结果不一样

问题描述

我一直在寻找这个问题一个多星期没有解决方案。我正在尝试从 docker-compose.yml 挂载一个卷这是我的目录结构:

-docker-compose.yml
-api
  -dockerfile
-frontend
  -dockerfile
-models

我想要在 api 服务和前端服务之间共享模型。首先,我尝试将模型放入容器中。在容器的 /usr/src/models 目录及其所有内容中。这个命令很好用

docker run -it --mount src="$(pwd)/models",target=/usr/src/models,type=bind -p 3000:3000 website_api

需要注意的重要一点是,当我在 VS 代码中检查 docker 容器时,它会产生这个:website_api.json:

"Mounts": [
            {
                "Type": "bind",
                "Source": "/home/kevin/source/repos/cropwatch/website/models",
                "Target": "/usr/src/models"
            }
        ],

这是 json 文件的内部,还有很多其他的东西。但是,当我运行 docker-compose 时,设置如下:

version: "3.8"
services:
    api:
        container_name: api
        restart: always
        build:
            context: ./
            dockerfile: ./api/dockerfile
        ports:
            - "3000:3000"
            - "3001:3001"
        volumes:
            - type: bind
              source: "./models"
              target: "/usr/src/models"

json 文件中的挂载路径如下所示:

"Mounts": [],

并且我容器中的 /usr/src/models 目录是空的...

因此,这两件事与我之前似乎相信的不同。

关于我在 docker-compose.yml 文件中做错了什么的任何想法?

标签: docker-compose

解决方案


这应该做的工作:

tree
.
├── api
│   └── dockerfile
├── docker-compose.yml
└── models
    └── someFile
cat docker-compose.yml 
version: "3.8"
services:
    api:
        container_name: api
        restart: always
        build:
            context: ./
            dockerfile: ./api/dockerfile
        volumes:
            - ./models:/usr/src/models

docker-compose up -d

docker exec 5ea0c49003f6 sh -c "ls -la /usr/src/models"
total 8
drwxr-xr-x 2 1000 1000 4096 Aug  3 20:09 .
drwxr-xr-x 1 root root 4096 Aug  3 20:15 ..
-rw-r--r-- 1 1000 1000    0 Aug  3 20:09 someFile
docker container inspect --format '{{.Mounts}}' 5ea0c49003f6
[{bind  /home/neo/so-playground/mounts-63236400/models /usr/src/models  rw true rprivate}]

推荐阅读