LoginSignup
42
37

More than 5 years have passed since last update.

Docker for Windows で postgres コンテナの Volume マウントを安全にする

Last updated at Posted at 2017-06-17

はじめに

Docker でコンテナを使ってDBを動かすとき、コンテナを落としてもデータが消えないよう、多くの人はDBのデータディレクトリをホスト側にマウントすると思います。

本記事は PostgreSQL についてですが、他DBでも同様だと思われます。

BAD: ホストOSのDirectoryをマウントする

一番Basicな方法だと思いますが、Windowsですと Permission denied だとか、書き込み時に initdb: could not fsync file Errorが頻発します。頑張ってLinuxの仮想FileSystemをWindows上で再現しているので折り合いが悪い様子。

### (a) コマンド直打ちの場合
$ docker run -d -v ./data:/var/lib/postgresql/data postgres:9.6.3-alpine
### (b) docker-compose.yml の場合
version: '2'
services:
  db:
    image: postgres:9.6.3-alpine
    volumes:
      - ./data:/var/lib/postgresql/data

Windows10 (Docker for Windows) の場合は↓も必要。

sharedrives.png

GOOD: Named Volume をマウントする

DockerNamed Volume にマウントする方法で安定しました。

### (a) コマンド直打ちの場合
$ docker volume create dbdata
dbdata

$ docker volume ls
DRIVER              VOLUME NAME
local               dbdata

$ docker run -d -v dbdata:/var/lib/postgresql/data postgres:9.6.3-alpine
### (b) docker-compose.yml の場合
version: '2'
services:
  db:
    image: postgres:9.6.3-alpine
    volumes:
      - dbdata:/var/lib/postgresql/data

volumes:
  dbdata:

データを消したい時はこうします。

$ docker volume ls
DRIVER              VOLUME NAME
local               dbdata
local               dockerpostgres_dbdata   # <-- docker-compose で作った方. 勝手にPrefixが付く

$ docker volume rm dbdata
dbdata

参考

今回も Stack Overflow 先生のおかげで助かりました。

42
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
37