40094


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) ここから---  
上記解決したい問題については、[解決策](https://github.com/docker-library/postgres/issues/263
"Using volumes for persistent data:'initdb: directory /var/lib/postgresql/data
exists but is not empty'") がありました。  
環境変数 `PGDATA` に `/var/lib/postgresql/data1` 等、異なるパスを記述することで解決できるようです。  
解決の糸口は見つけましたが、表題の方法があるかどうかについて、気になるので、質問は削除せず、継続させていただきます。  
\---追記(2017/12/05 02:06) ここまで---

備考:  
[lost+foundを消すことも検討した](https://ja.stackoverflow.com/questions/28465/lostfound-%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AF%E5%89%8A%E9%99%A4%E3%81%97%E3%81%A6%E5%95%8F%E9%A1%8C%E3%81%AA%E3%81%84
"lost+found ディレクトリは削除して問題ない？")
が、必要となることもあるため、削除という手段は使用していない。かつ、再度lost+foundが作成されたとき、DB一覧にlost+foundが表示されてしまう(8.x系の記憶なので、最新でどうであるかは未検証)。  
[convoy側でlost+foundを抑止する可能性](https://github.com/rancher/convoy/issues/104
"rancher/convoy - New volumes contain lost+found -
#104")も考慮したが、issueの状態が更新されていないことから対応される見込みは薄いと判断した。

### 各種ファイルおよびコマンド実行結果

Dockerfile

<https://github.com/docker-
library/postgres/blob/d1725ffa8ba29ed7649bd453065eb392f63a3113/9.6/alpine/Dockerfile>

docker-compose.yml

[code]

    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
    
[/code]

sudo docker inspect test_sv

[code]

    [
        {
            "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": {
                        ...
            }
        }
    ]
    
[/code]

### 関連文章

[Compose ファイル・リファレンス - volumes,
volume_driver](http://docs.docker.jp/compose/compose-file.html#volumes-volume-
driver "Compose ファイル・リファレンス - volumes, volume_driver")


CC BY-SA 3.0
2017-12-04T16:44:12.163
40033
2017-12-06T14:16:03.603
2017-12-04T17:06:39.610
882
882
question
docker docker-compose
docker-composeでDockerfileのvolume設定を解除することは可能でしょうか


コメントよりは、回答の方が良いので、投稿します。

ソースはちょっと思い出せないのですが、 docker の image で volume が一度定義されていたとすると、少なくとも layer
を重ねる方式では、 volume 指定をなかったことにすることはできなかったと記憶しています。

ですので、 volume のパスが気にくわない、やり直したいと思った場合には、 オリジナルの Dockerfile を取得し、 Volume
指定を外した上でイメージをビルドし直す、などが必要になると思っています。


CC BY-SA 3.0
2017-12-06T14:16:03.603
40094
2017-12-06T14:16:03.603
754
40033
answer