Обнаружив, что это в значительной степени недокументировано, вот правильный способ смонтировать том NFS с помощью стека и компоновки докеров.
Самое главное, что вы должны использовать version: "3.2"
или выше. В противном случае у вас будут странные и неочевидные ошибки.
Вторая проблема заключается в том, что тома не обновляются автоматически при изменении их определения. Это может привести вас в кроличью нору к мысли, что ваши изменения неверны, если они просто не были применены. Убедитесь, что вы docker rm VOLUMENAME
везде, где это возможно, так как если том существует, он не будет проверен.
Третья проблема больше связана с NFS - папка NFS не будет создана на сервере, если она не существует. Так работает NFS. Вы должны убедиться, что он существует, прежде чем что-либо делать.
(Не удаляйте soft и nolock, если вы не уверены, что знаете, что делаете - это предотвратит зависание докера, если ваш сервер NFS отключится)
Вот полный пример:
[root@docker docker-mirror]# cat nfs-compose.yml
version: "3.2"
services:
rsyslog:
image: jumanjiman/rsyslog
ports:
- "514:514"
- "514:514/udp"
volumes:
- type: volume
source: example
target: /nfs
volume:
nocopy: true
volumes:
example:
driver_opts:
type: "nfs"
o: "addr=10.40.0.199,nolock,soft,rw"
device: ":/docker/example"
[root@docker docker-mirror]# docker stack deploy --with-registry-auth -c nfs-compose.yml rsyslog
Creating network rsyslog_default
Creating service rsyslog_rsyslog
[root@docker docker-mirror]# docker stack ps rsyslog
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
tb1dod43fe4c rsyslog_rsyslog.1 jumanjiman/rsyslog:latest swarm-4 Running Starting less than a second ago
[root@docker docker-mirror]#
Теперь о рое-4:
root@swarm-4:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d883e0f14d3f jumanjiman/rsyslog:latest "rsyslogd -n -f /e..." 6 seconds ago Up 5 seconds 514/tcp, 514/udp rsyslog_rsyslog.1.tb1dod43fe4cy3j5vzsy7pgv5
root@swarm-4:~# docker exec -it d883e0f14d3f df -h /nfs
Filesystem Size Used Available Use% Mounted on
:/docker/example 7.2T 5.5T 1.7T 77% /nfs
root@swarm-4:~#
Этот том будет создан (но не уничтожен) на любом узле роя, на котором работает стек.
root@swarm-4:~# docker volume inspect rsyslog_example
[
{
"CreatedAt": "2017-09-29T13:53:59+10:00",
"Driver": "local",
"Labels": {
"com.docker.stack.namespace": "rsyslog"
},
"Mountpoint": "/var/lib/docker/volumes/rsyslog_example/_data",
"Name": "rsyslog_example",
"Options": {
"device": ":/docker/example",
"o": "addr=10.40.0.199,nolock,soft,rw",
"type": "nfs"
},
"Scope": "local"
}
]
root@swarm-4:~#
person
xrobau
schedule
29.09.2017