docker-composeでDockerfileのvolume設定を解除することは可能でしょうか
volumeについて、docker-compose.yml
には、/var/lib/postgresql
設定してあり、Dockerfile
には /var/lib/postgresql/data
が設定されています。
このとき、Dockerfile
のvolume設定をdocker-compose.yml
から解除することは可能でしょうか。
解消したい問題の経緯
volume-driverにはconvoyを使用しているため、lost+found
が存在すると、initdb
にて次のようなエラーが出てしまう。これを回避しつつ、volume-driverにconvoyを使用したい。
initdb: directory "/var/lib/postgresql/data" exists but is not empty
上記問題を回避するためにとった対策と現実:
親ディレクトリである /var/lib/postgresql
をvolumeとすれば解決できると考えた。
実際、 /var/lib/postgresql
と /var/lib/postgresql/data
にvolumeが使用された。
結果、/var/lib/postgresql
にはデータが入らず、 /var/lib/postgresql/data
のみにデータが記録された。
/var/lib/postgresql/data
がvolumeとして設定されることを防げれば、/var/lib/postgresql
にデータが入ると考えた。
---追記(2017/12/05 02:06) ここから---
上記解決したい問題については、解決策 がありました。
環境変数 PGDATA
に /var/lib/postgresql/data1
等、異なるパスを記述することで解決できるようです。
解決の糸口は見つけましたが、表題の方法があるかどうかについて、気になるので、質問は削除せず、継続させていただきます。
---追記(2017/12/05 02:06) ここまで---
備考:
lost+foundを消すことも検討した が、必要となることもあるため、削除という手段は使用していない。かつ、再度lost+foundが作成されたとき、DB一覧にlost+foundが表示されてしまう(8.x系の記憶なので、最新でどうであるかは未検証)。
convoy側でlost+foundを抑止する可能性も考慮したが、issueの状態が更新されていないことから対応される見込みは薄いと判断した。
各種ファイルおよびコマンド実行結果
Dockerfile
docker-compose.yml
version: '3.1'
services:
db:
image: postgres:9.6-alpine
environment:
POSTGRES_USER: work
POSTGRES_PASSWORD: password1
container_name: test_sv
volumes:
- data-db:/var/lib/postgresql
volumes:
data-db:
# 事前にvolumeを作成している場合は以下のコメントを外す
# external:
# name: convoy_data-db
sudo docker inspect test_sv
[
{
"Id": "15aa91af404f082ecbaa6b397096f5f47b20640c62dcc9c635457bd2055a7975",
"Created": "2017-12-04T14:28:11.596184856Z",
"Path": "docker-entrypoint.sh",
"Args": [
"postgres"
],
...
"Name": "/test_sv",
"RestartCount": 0,
"Driver": "overlay",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": [
"work_data-db:/var/lib/postgresql:rw"
],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "work_default",
"PortBindings": {},
"RestartPolicy": {
"Name": "",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": [],
...
},
"GraphDriver": {
...
},
"Mounts": [
{
"Type": "volume",
"Name": "9e44772442f9a93457a01172a17816801601b43ffeaea009a1548d55d8efebde",
"Source": "/var/lib/docker/volumes/9e44772442f9a93457a01172a17816801601b43ffeaea009a1548d55d8efebde/_data",
"Destination": "/var/lib/postgresql/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "work_data-db",
"Source": "/var/lib/docker/volumes/work_data-db/_data",
"Destination": "/var/lib/postgresql",
"Driver": "local",
"Mode": "rw",
"RW": true,
"Propagation": ""
}
],
"Config": {
"Hostname": "15aa91af404f",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"5432/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"POSTGRES_PASSWORD=password1",
"POSTGRES_USER=work",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LANG=en_US.utf8",
"PG_MAJOR=9.6",
"PG_VERSION=9.6.5",
"PG_SHA256=06da12a7e3dddeb803962af8309fa06da9d6989f49e22865335f0a14bad0aaaa",
"PGDATA=/var/lib/postgresql/data"
],
"Cmd": [
"postgres"
],
"ArgsEscaped": true,
"Image": "postgres:9.6-alpine",
"Volumes": {
"/var/lib/postgresql": {},
"/var/lib/postgresql/data": {}
},
"WorkingDir": "",
"Entrypoint": [
"docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": {
"com.docker.compose.config-hash": "9313f5bb20018503d6e305687c67a382e204b9e0911a3fdd66c54507ee9293ce",
"com.docker.compose.container-number": "1",
"com.docker.compose.oneoff": "False",
"com.docker.compose.project": "work",
"com.docker.compose.service": "db",
"com.docker.compose.version": "1.16.1"
}
},
"NetworkSettings": {
...
}
}
]