Mount an SMB share to a Docker container in two ways: using the Netshare plugin and by means of the local driver
Comment: the version of Docker - 19.03.11, Docker Compose - 1.26.0, Netshare - 0.36
Basic configuration
install Docker Engine — Community and Docker Compose as discussed here
create the /etc/docker/test folder for storing deployment settings of a test container
mkdir /etc/docker/test
create the /etc/docker/test/docker-compose.yml file with the deployment configuration of the container
version: '3.8' networks: net: ipam: config: - subnet: 192.168.101.0/24 services: app: container_name: test image: alpine networks: net: stdin_open: true tty: true entrypoint: /bin/sh
Netshare plugin
download the plugin
curl -L https://github.com/ContainX/docker-volume-netshare/releases/download/v0.36/docker-volume-netshare_0.36_linux_amd64-bin -o /usr/local/sbin/docker-volume-netshare
chmod 700 /usr/local/sbin/docker-volume-netshare
create the /usr/lib/systemd/system/docker-volume-netshare.service unit file
[Unit] Description=Docker Netshare Plugin After=network.target [Service] Type=simple ExecStart=/usr/local/sbin/docker-volume-netshare cifs [Install] WantedBy=multi-user.target
reload the systemd configuration
systemctl daemon-reload
start the service
systemctl start docker-volume-netshare
replace the content of the /etc/docker/test/docker-compose.yml file with the following
version: '3.8' networks: net: ipam: config: - subnet: 192.168.101.0/24 volumes: vol: name: server.domain.example/share/ driver: cifs driver_opts: cifsopts: username=usr,password=pwd services: app: container_name: test image: alpine networks: net: volumes: - vol:/mount stdin_open: true tty: true entrypoint: /bin/sh
connect to the container and check to see if the share was successfully mounted
docker exec -t -i test /bin/sh
ls -l /mount
Local driver
replace the content of the /etc/docker/test/docker-compose.yml file with the following
version: '3.8' networks: net: ipam: config: - subnet: 192.168.101.0/24 volumes: vol: driver: local driver_opts: type: cifs device: //10.1.1.1/share o: username=usr,password=pwd services: app: container_name: test image: alpine networks: net: volumes: - vol:/mount stdin_open: true tty: true entrypoint: /bin/sh
Comment: when using the local driver one should specify the IP address of the server instead of its DNS name otherwise the container woun't start
connect to the container and check to see if the share was successfully mounted
docker exec -t -i test /bin/sh
ls -l /mount