docker-compose: define mount for bind mount and managed mount
Asked Answered
A

4

59

I'm using docker-compose for defining my service. In docker, there are two concepts for docker volume. Firstly is about bind mount: mount on host storage.

docker run -d --name web-app -v $HOST/location:/container/location -p 80:80 httpd:latest

Secondly is about managed mount: abstract storage, not depend on host.

docker run -d --name web-app -v /container/location -p 80:80 httpd:latest

I want to map those concepts to docker-compose. It means how can I define bind mount and managed mount when using docker-compose.

Avionics answered 23/12, 2016 at 10:20 Comment(2)
Check docs.docker.com/compose/compose-file/#/volumes-volumedriverTheorize
No offense, but you ask a lot of fundamental questions about how to use Docker Compose. I suggest you start going through the Docker Compose overview, it explains all of the basic concepts you're asking about: docs.docker.com/compose/overviewInjunction
I
47

You can find these Docker concepts in the volumes section of Docker Compose: https://docs.docker.com/compose/compose-file/#/volumes-volumedriver

Examples:

volumes:
  # Just specify a path and let the Engine create a volume
  - /container/location

  # Specify an absolute path mapping
  - ./myfolder/location:/container/location
Injunction answered 23/12, 2016 at 10:44 Comment(2)
do you know what syntax would work for the volumes: tag in the root of the .yml file? Your solution will only work for the volumes: tag nested under a services: tag.Illdefined
As far as I understand only named volumes are supposed to be listed in the top level volumes key. "named volumes" are a special method of persisting data for a container, in contrast to bind-mounts or tmpfs mounts. docs.docker.com/storageDentilingual
L
119

Below is the configuration for both types. https://docs.docker.com/compose/compose-file/compose-file-v3/#volumes

version: "3.2"
services:
  web:
    image: httpd:latest
    volumes:
      - type: bind
        source: $HOST/location
        target: /container/location
      - type: volume
        source: mydata
        target: /container/location
volumes:
  mydata:
Libelee answered 9/4, 2019 at 21:29 Comment(3)
The documentation link did not work for me, bout found the information here: github.com/compose-spec/compose-spec/blob/master/…Lucila
Can you not specify a specific source location for volumes?Nealey
@Nealey : For bind mount yes. For volume, you can't specify specific source location. It's fully managed by docker.Resident
I
47

You can find these Docker concepts in the volumes section of Docker Compose: https://docs.docker.com/compose/compose-file/#/volumes-volumedriver

Examples:

volumes:
  # Just specify a path and let the Engine create a volume
  - /container/location

  # Specify an absolute path mapping
  - ./myfolder/location:/container/location
Injunction answered 23/12, 2016 at 10:44 Comment(2)
do you know what syntax would work for the volumes: tag in the root of the .yml file? Your solution will only work for the volumes: tag nested under a services: tag.Illdefined
As far as I understand only named volumes are supposed to be listed in the top level volumes key. "named volumes" are a special method of persisting data for a container, in contrast to bind-mounts or tmpfs mounts. docs.docker.com/storageDentilingual
L
10

I know it's late to answer but I'm mostly writing this for the community.

Answer:

You only need to do it like this:

    volumes:
       - ./root/instantclient_12_2/ojdbc8.jar:/etc/kafka-connect/jars/ojdbc8.jar
       - type: bind
         source: $HOST/etc
         target: /kernel-etc

Then, for running it in 'easy to debug mode' do it first with docker-compose up and when you made sure it was working fine put a ring on it by adding a -d at the end.

Important Notes

1-Make sure your docker-compose version is at least 3.2 and in my case, it is3.7. for updating and getting rid of the old version do as below:

sudo apt-get remove docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Source: https://github.com/10up/wp-local-docker/issues/58#issuecomment-476786006

2- Don't forget to rm your old container so you don't face weird port-related issues. heres how:

docker container stop YOUR_CONTAINER_ID
docker container rm YOUR_CONTAINER_ID

Good luck.

Livy answered 17/3, 2020 at 17:23 Comment(2)
Confused a bit: you mean docker compose version for yaml file and not docker-compose itself. As of now latest docker compose is 2.11.2. And you used 1.23.2Hick
@EugenKonkov No problem my friend, here's the link to versioning i meant. docs.docker.com/compose/compose-file/compose-versioningLivy
S
2

As of Docker 3 on OSX, I had to disable Experimental Feature gRPC and restart as per: https://github.com/microsoft/vscode-remote-release/issues/4171

Scrummage answered 11/12, 2020 at 19:27 Comment(1)
@dippas That's what the issue says to do "disable Experimental Feature gRPC" There's not a lot more contextStroy

© 2022 - 2024 — McMap. All rights reserved.