Home > Back-end >  Docker-Compose Building back unable to prepare context: unable to evaluate symlinks in Dockerfile pa
Docker-Compose Building back unable to prepare context: unable to evaluate symlinks in Dockerfile pa

Time:05-07

I have the following dir structure:

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

The dockerfile contains

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

And when I execute

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

or

docker-compose up -d

or

docker-compose up back

I always get

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

I don't understand why docker appends the last '/services' to the path too.

Any idea about how can I solve this?

Thanks

CodePudding user response:

The Dockerfile is relative to the context when using compose. It's a bit inconsistent to the way docker CLI behaves, but it is what it is.

In your case you could simplify it anyway:

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

If you wanted to provide file and context, the as mentioned the Dockerfile needs to be relative to the context.

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

This would be only required if the file wasn't named Dockerfile and/or is not in the context directory. So in this case, you can use the short form from above.

  • Related