Docker-Compose Building back 无法准备上下文:无法评估 Docker 文件路径中的符号链接

Docker-Compose Building back unable to prepare context: unable to evaluate symlinks in Dockerfile path

我有以下目录结构:

.
├── docker-compose.yml
├── README.md
└── services
    ├── api
    │   ├── Dockerfile
    │   └── src
    │       ├── app.py
    │       ├── settings.py
    │       └── .env
    └── recorder
        ├── Dockerfile
        ├── Pipfile
        ├── Pipfile.lock
        ├── .env
        └── src

docker文件包含

version: '3'
services:

  back:
    build: 
      dockerfile: services/api/Dockerfile
      context: services/api/
    ports:
      - '5001:5001'
    env_file:
      - services/api/.env

  recorder:
    build: 
      dockerfile: services/recorder/Dockerfile
      context: services/recorder/
    ports:
      - '5002:5002'
    env_file:
      - services/recorder/.env

当我执行时

docker-compose up -d --no-deps --build

docker-compose up -d

docker-compose up back

我总是得到

Building back unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat > /home/juser/VideoCapturer/services/api/services: no such file or directory

我不明白为什么 docker 也将最后一个 '/services' 附加到路径中。

知道如何解决这个问题吗?

谢谢

Dockerfile是相对于使用compose时的上下文的。这与 docker CLI 的行为方式有点不一致,但它就是这样。

在你的情况下,无论如何你都可以简化它:

services:
  back:
    build: ./services/api
  recorder:
    build: ./services/recorder

如果您想提供文件和上下文,如前所述,Dockerfile 需要与上下文相关。

services:
  back:
    build: 
      context: ./services/api
      dockerfile: ./Dockerfile
  recorder:
      context: ./services/recorder
      dockerfile: ./Dockerfile

仅当文件未命名为 Dockerfile 时才需要这样做 and/or 不在上下文目录中。所以在这种情况下,您可以使用上面的缩写形式。