LoginSignup
17
19

More than 3 years have passed since last update.

docker-compose.ymlで相対パスを使いたい & 日本語環境postgresコンテナのメモ

Posted at

ここに書いていること

プロジェクトのディレクトリ内にボリュームディレクトリを作りたかった
=> でも名前付きvolumeの宣言で相対パスって記述できるの・・・?
=> docker-composeでも$PWDが使える!

環境

  • MacOS Mojave version 10.14.6
  • Docker version 19.03.2
  • docker-compose version 1.24.1

相対パスを使いたい

まず ./ で動くかなと試してみました。

docker-compose.yml
volumes:
  pg-volume:
    driver_opts:
      type: none
      device: ./docker/postgres/data
      o: bind

docker-compose up -d したら案の定ERROR


Creating postgresql_6543 ... error

ERROR: for postgresql_6543  Cannot create container for service postgresql: 
failed to mount local volume: mount ./docker/postgres/data:/var/lib/docker/volumes/blog_pg-volume/_data, 
flags: 0x1000: no such file or directory

ERROR: for postgresql  Cannot create container for service postgresql: 
failed to mount local volume: mount ./docker/postgres/data:/var/lib/docker/volumes/blog_pg-volume/_data, 
flags: 0x1000: no such file or directory

$PWD = カレントディレクトリ

調べてみると、docker-composeのファイル内でも$PWDが解釈されるようです。
言うまでもありませんが、$PWDはカレントディレクトリです。
環境を共有しやすいのがdockerの大きな利点の一つなのに、絶対パスは書きたくないですよね。

例えば /home/myname/app がgitで管理しているアプリケーションのディレクトリの場合

      device: /home/myname/app/docker/postgres/data # これを
      device: $PWD/docker/postgres/data             # こうしておく

これでgit clone後、 docker-compose up -d を叩くだけで良くなりました。
ちなみにWindowsやWSLでは動かないようです。。。:cry:(そりゃそうか)

Dockerfile

メモも兼ねて書いておきます。

./docker/postgres/Dockerfile

FROM postgres:10.5
RUN localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
docker-compose.yml

version: "3"

services:
  postgresql:
    build:
      context: .
      dockerfile: ./docker/postgres/
    container_name: postgresql_6543
    ports:
      - 6543:5432
    volumes:
      - ./docker/postgres/init:/docker-entrypoint-initdb.d
      - pg-volume:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: root
      POSTGRES_INITDB_ARGS: "--encoding=UTF-8"
      LANG: ja_JP.utf8
    hostname: postgres
    restart: always
    user: root

volumes:
  pg-volume:
    driver_opts:
      type: none
      device: $PWD/docker/postgres/data
      o: bind
17
19
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
17
19