user5809756
user5809756

Reputation: 45

Remote & Local Volume Paths on Docker Machine

I have three nodes with docker in swarm mode. I deploy from my machine using contexts to target remote host.

I have the following docker-compose.yml:

version: "3.9"
services:
...
  nginx:
    image: 'nginx:1.23.3-alpine'
    ports:
      - 8080:80
    volumes:
      - ./conf:/etc/nginx/conf.d
    depends_on:
      - ui
...

How can I deliver the ./conf directory to one of the docker hosts? I found an outdated and inconvenient way, but there are more recent solutions (declare directly in the docker-compose.yml)?

Upvotes: 0

Views: 252

Answers (1)

Chris Becke
Chris Becke

Reputation: 36016

The simple answer is, you don't. Docker Compose does not support this directly.

However, there are options that involve varying amounts of refactoring of your deployment process and they include:

  1. Create a root relative conf folder (/mnt/conf etc) on the remote server, and reference that. Deploy files via some other process (scp etc.)
  2. Create a "conf" volume remotely, and populate it using a docker image that you build that carries the files. (There is a syntax to mount a filesystem from another container, IDK if its compose compatible, but you could just mount a container that you build with the contents of ./conf You will need a registry to store the image so you can build it locally, but reference it remotely. registry:2 is easy to deploy)
  3. If "conf" contains 1 to a few files, then enable swarm mode remotely, and mount the individual files as docker configs. This means using docker -c remote stack deploy rather than docker -c remote compose up.
  4. Make "conf" shared on a nfs server, and declare the volume using docker local volume drivers option that supports nfs (or other fstab compatible) mounts. Alternative put the files in a s3 bucket (AWS or using a product like minio) and use the same syntax to use the "s3fs" fuse driver (if you don't use a containerised fuse driver, the fs driver will need to be installed on the remote host)
  5. Use an actual docker volume plugin (e.g. https://rclone.org/docker/) to mount a wide variety of network shares into a compose or swarm service.

Upvotes: 1

Related Questions