sql >> データベース >  >> RDS >> PostgreSQL

Dockerコンテナ内のPostgreSQLの権限の問題

    他の答えは確かに問題の根本的な原因を示していますが、それが指しているヘルプページには解決策が含まれていません。これが私のためにこの仕事をするために私が思いついたものです:

    1. 通常のdocker-composeファイルを使用してコンテナを起動します。これにより、ハードコードされたuid:gid(999:999)でディレクトリが作成されます
    version: '3.7'
    
    services:
      db:
        image: postgres
        container_name: postgres
        volumes:
          - ./data:/var/lib/postgresql/data
        environment:
          POSTGRES_USER: fake_database_user
          POSTGRES_PASSWORD: fake_database_PASSWORD
    
    1. コンテナを停止し、所有権を必要なuid:gidに手動で変更します(この例では1000:1000を使用します
    $ docker stop postgres
    $ sudo chown -R 1000:1000 ./data 
    
    1. dockerファイルを編集して目的のuid:gidを追加し、docker-composeを使用して再起動します(user:に注意してください) )
    version: '3.7'
    
    services:
      db:
        image: postgres
        container_name: postgres
        volumes:
          - ./data:/var/lib/postgresql/data
        user: 1000:1000
        environment:
          POSTGRES_USER: fake_database_user
          POSTGRES_PASSWORD: fake_database_password
    

    user:だけを使用できない理由 最初から、イメージが別のユーザーとして実行されている場合、データファイルの作成に失敗します。

    画像ドキュメントページ/etc/passwdを公開するボリュームを追加するソリューションについては言及されています --userを指定すると、画像内で読み取り専用としてファイル ただし、次のエラーが発生したため、最新の画像では機能しませんでした。実際、提案された3つの解決策のどれも私にはうまくいきませんでした。

    initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted
    


    1. SQLServer2019でのデータベースリカバリの高速化

    2. 常にゼロの結果を返すSQLクエリはありますか?

    3. Laravel:左結合クエリ

    4. MySQLストアドプロシージャからシェルコマンドを実行する