2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rancher DesktopでPostgreSQLのコンテナが起動しない

Last updated at Posted at 2024-09-18

概要

Apple SiliconのMacでRancher Desktopを使用して、Docker ComposeでPostgreSQLのコンテナを起動することを想定しています。
そのときに、Permission deniedにより起動しない問題が発生しました。調べてみると、Rancher DesktopのmountTypeを9pに設定すると、解決すると情報がありました。しかし、それでも解決せず他の解決方法を見つけたため、共有します。

環境

MacにRancher Desktopをインストールしています。
docker composeでserverとDBのコンテナを起動するというよくある構成です。
/db/dataをマウントしてDBのデータを保存しています。

docker-compose.yml
services:
  server:
    build:
      context: ./server
      dockerfile: Dockerfile
    container_name: server_test
    ports:
      - 8000:80
    tty: true
    volumes:
      - ./server/src:/src
    depends_on:
      db:
        condition: service_healthy
    env_file:
      - .env

  db:
    container_name: db_test
    build:
      dockerfile: ./db/Dockerfile
    ports:
      - 5433:5432
    volumes:
      - ./db/init:/docker-entrypoint-initdb.d
      - ./db/data:/var/lib/postgresql/data
    tty: true
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DATABASE=postgres
      - DATABASE_HOST=localhost
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 1s
      timeout: 5s
      retries: 10
Dockerfile
FROM postgres:14.0

エラー内容

以下を実行して、コンテナをビルド、起動します。

docker compose build
docker compose up

コンテナを起動すると、以下のようなPermission deniedというエラーが出ます。

db_test      | chown: changing ownership of '/var/lib/postgresql/data/base/1/2836': Permission denied
db_test      | chown: changing ownership of '/var/lib/postgresql/data/base/1/2663': Permission denied
Gracefully stopping... (press Ctrl+C again to force)
dependency failed to start: container db_test exited (1)

そこで、以下の記事を参考にoverride.yamlを書いて、mountTypeを9pに変更しました。

しかし、DBコンテナがhealth状態にいつまで経ってもなりません。

docker compose up
[+] Running 1/0
 ✔ Container db_test  Created                                                                                                                      0.0s 
Attaching to db_test, SQL_injection_server
db_test      | 
db_test      | PostgreSQL Database directory appears to contain a database; Skipping initialization
db_test      | 
db_test      | 2024-09-18 06:27:33.158 UTC [1] LOG:  starting PostgreSQL 14.0 (Debian 14.0-1.pgdg110+1) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
db_test      | 2024-09-18 06:27:33.159 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db_test      | 2024-09-18 06:27:33.159 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db_test      | 2024-09-18 06:27:33.168 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Gracefully stopping... (press Ctrl+C again to force)
dependency failed to start: container db_test is unhealthy

depends_onオプションを削除してDBの状態を待機せずに起動しても、DBに正常にアクセスすることができません

解決方法

Rancher Desktopの設定で仮想マシンのエミュレーションとボリュームのマウント方式を変更すると、問題が解決しました。

  • override.yamlでmountTypeを9pに設定している人はoverride.yamlを削除します
  • Rancher Desktopを開いて、Preferences > Emulation > Virtual Machine > EmulationのVirtual Machine TypeをVZに変更します
  • Preferences > Virtual Machine > Emulation > VolumesのMount Typeをvirtiosに変更します
2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?