How to map a specific file within a named binding?

  Kiến thức lập trình

I’m trying to setup an evcc’s docker compose setup.

They do recommend the following configuration:

services:
  evcc:
    command:
      - evcc
    container_name: evcc
    image: evcc/evcc:latest
    ports:
      - 7070:7070/tcp
      - 8887:8887/tcp
      - 7090:7090/udp
      - 9522:9522/udp
    volumes:
      - /etc/evcc.yaml:/etc/evcc.yaml
      - /home/[user]/.evcc:/root/.evcc
    restart: unless-stopped

In my case, I want to bind all the volumes of my docker instances to my NAS(like this if it fails, my data & configuration are safe) through NFS(and also configure it for traefik):

version: "3.9"
services:
  evcc:
    command:
      - evcc
    image: evcc/evcc:latest
    ports:
      - 7070:7070/tcp
      - 8887:8887/tcp
      - 7090:7090/udp
      - 9522:9522/udp
    volumes:
      - evcc-config/evcc.yaml:/etc/evcc.yaml
      - evcc-config/.evcc:/root/.evcc
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.evcc.rule=Host(`evcc.mydomain.com`)"
      - "traefik.http.routers.evcc.entrypoints=websecure"
      - "traefik.http.routers.evcc.tls.certresolver=myresolver"
      - "traefik.http.services.evcc.loadbalancer.server.port=7070" 

volumes:
  evcc-config:
    driver_opts:
      type: "nfs"
      o: "addr=192.168.0.60,nolock,rw,soft"
      device: ":/volume2/apps/config/evcc"

But it doesn’t seems to like the volume with a file, I get the following error:

service evcc: undefined volume “evcc-config/evcc.yaml”

My guess is that I cannot bind a path with a named binding? But then, how to do similar with it?

I cannot bind the whole ETC to my NAS, same for the whole root?

The short syntax for specifying a volume mount is either:

- <volume_name>:<mountpoint>

Or:

- <source path>:<mountpoint>

The only way Docker can differentiate between a volume name and a path is whether or not the string includes a directory separator (/). Since you’re trying to do this:

evcc-config/evcc.yaml:/etc/evcc.yaml

Docker assumes you’re referring to a local filesystem path.

You’re looking for a subpath mount, which is supported in recent versions of Docker and Docker Compose. You need to use the long format for volume mounts, which permits you to set a subpath option.

The syntax would look like this:

services:
  evcc:
    command:
      - evcc
    image: evcc/evcc:latest
    volumes:
    - type: volume
      source: evcc-config
      target: /etc/evcc.yaml
      volume:
        nocopy: true
        subpath: evcc.yaml

1

Theme wordpress giá rẻ Theme wordpress giá rẻ Thiết kế website Kho Theme wordpress Kho Theme WP Theme WP

LEAVE A COMMENT