使用 Ansible 的 Docker NFS 卷
Posted
技术标签:
【中文标题】使用 Ansible 的 Docker NFS 卷【英文标题】:Docker NFS volume using Ansible 【发布时间】:2020-08-31 07:27:03 【问题描述】:举个简单的例子,比如
$ docker volume create --driver local \
--opt type=nfs \
--opt o=addr=192.168.1.1,rw \
--opt device=:/path/to/dir \
foo
如何使用 Ansible 做同样的事情?例如我试过了
- name: NFS volume mount
docker_volume:
driver: "local"
driver_options:
type: nfs
o: "addr=192.168.1.1,rw"
device: /path/to/dir
volume_name: foo
这将在没有错误的情况下创建卷,但当卷与docker_container
模块一起使用时它将失败。
TASK [oracle-database : docker_container] **************************************
fatal: [oracle]: FAILED! => "changed": false, "msg": "Error starting container 1beb3254e25a8fe47cd78e803a2050f24020cf72e138472d7d14d963e02bec7f: 500 Server Error: Internal Server Error (\"\"message\":\"error while mounting volume '/var/lib/docker/volumes/foo/_data': failed to mount local volume: mount /path/to/dir:/var/lib/docker/volumes/foo/_data, data: addr=192.168.1.1: invalid argument\"\")"
当我使用 Ansibe 创建卷时
[root@oracle ~]# docker volume inspect oracle-dumps
[
"CreatedAt": "2020-08-31T02:07:14-07:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/foo/_data",
"Name": "foo",
"Options":
"device": "/path/to/dir",
"o": "192.168.1.1,rw",
"type": "nfs"
,
"Scope": "local"
]
当我使用 docker volume create
手动创建卷时:
[root@oracle ~]# docker volume inspect oracle-dumps
[
"CreatedAt": "2020-08-31T02:07:14-07:00",
"Driver": "local",
"Labels": ,
"Mountpoint": "/var/lib/docker/volumes/foo/_data",
"Name": "foo",
"Options":
"device": "/path/to/dir",
"o": "192.168.1.1,rw",
"type": "nfs"
,
"Scope": "local"
]
除了标签属性,看起来几乎一样。
容器的docker inspect
在体积上是一样的
"Type": "volume",
"Name": "oracle-dumps",
"Source": "/var/lib/docker/volumes/foo/_data",
"Destination": "/otherpath/to/dir",
"Driver": "local",
"Mode": "rw",
"RW": true,
"Propagation": ""
所以结论是存在错误,但在哪里?安西布尔?码头工人-py?码头工人?
解决方法是
- name: Create dump volume
command:
cmd: "docker volume create --driver local --opt type=nfs --opt o=addr=192.168.1.1,rw --opt device=:/path/to/dir foo"
【问题讨论】:
你试过去掉o参数周围的“”吗? 是的,试过了,同样的问题 嗯,你确定你删除了不同测试之间的卷吗?如果我运行与您相同的docker volume create
,我会得到"o": "addr=192.168.1.1,rw"
而不是"o": "192.168.1.1,rw"
【参考方案1】:
问题是缺少:
。设备路径应为:/path/to/dir
- name: NFS volume mount
docker_volume:
driver: "local"
driver_options:
type: nfs
o: "addr=192.168.1.1,rw"
device: :/path/to/dir
volume_name: foo
【讨论】:
以上是关于使用 Ansible 的 Docker NFS 卷的主要内容,如果未能解决你的问题,请参考以下文章