'link dir in docker to dir on host system

I would like to know how I can - essentailly - mount a docker dir so I can see the files in my file manager and all changes that I make are then present in the docker image. Do I need to install an ssh sever on the docker image and sshfs into it? This seems overly complicated and by the lack of ssh servers I think there has to be a better way.

I am following the documentation found here: https://hub.docker.com/_/wordpress/

Sadly this documentation is severely lacking (actually like all docker documentation that I found).

I guess it has something to do with the volumes, but I cannot figure out how they work.

Thanks for any help!

docker-compose file:

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:


Solution 1:[1]

create the directories "wordpress" and "db" on the same level as the docker-compose.yml.

enter the following in the docker-compose.yml file (notice the "./" under the volumes and the omittance of the "volume:" stuff at the end):

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - ./wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - ./db:/var/lib/mysql

start docker and run "$ docker-compose up" and you will find that the directories you have created contain the files from the docker image.

Solution 2:[2]

You can bind a directory from the your machine to the container using the volume flag and following the pattern /your/machine/path:/container/path/ for example

docker run -v /host/project_folder:/container/project <image_name>

You can view /host/project_folder in a file browser will be the same as /container/project. Any changes you make to in this directory will be reflected in the container as well, while it is running. Note that no changes you make in this folder will be persistent

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 composersucks
Solution 2 Alex