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