簡體   English   中英

等待服務 postgres 啟動 dockerfile

[英]Wait service postgres start dockerfile

我正在使用 docker 文件構建 ubuntu 映像已安裝 postgresql。 但我等不及服務 postgres 狀態 OK

FROM ubuntu:18.04
....
RUN apt-get update && apt-get install -y postgresql-11
RUN service postgresql start
RUN su postgres
RUN psql
RUN CREATE USER kong; CREATE DATABASE kong OWNER kong;
RUN \q
RUN exit

一切似乎都還好,但是RUN su postgres會拋出錯誤,因為在RUN service postgresql start之后 service postgresql 尚未啟動。 我怎樣才能做到這一點?

首先,Dockerfile 中的每個 RUN 命令都在單獨的 shell 中運行,並且RUN命令應該用於安裝或配置,而不是用於starting進程。 該過程應從CMDentrypoint開始。

運行與 CMD

最好使用官方postgress docker 圖像

docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres

默認的 postgres 用戶和數據庫是在 initdb 的入口點中創建的。 或者您可以基於 postgress 構建您的圖像。

FROM postgres:11
ENV POSTGRES_USER=kong
ENV POSTGRES_PASSWORD=example
COPY seed.sql /docker-entrypoint-initdb.d/seed.sql

這將創建一個帶有用戶、密碼的圖像,並且入口點也會在容器啟動時插入種子數據。

POSTGRES_USER

此可選環境變量與 POSTGRES_PASSWORD 結合使用以設置用戶及其密碼。 此變量將創建具有超級用戶權限的指定用戶和同名數據庫。 如果未指定,則將使用 postgres 的默認用戶。

官方 docker 圖像的一些優勢

  • 從 ENV 創建數據庫
  • 從 ENV 創建數據庫用戶
  • 使用種子數據啟動容器
  • 將等待 postgres 啟動並運行

一切你需要的

# Use postgres/example user/password credentials
version: '3.1'

services:

  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: example

初始化腳本

如果您想在從該鏡像派生的鏡像中進行額外的初始化,請在 /docker-entrypoint-initdb.d 下添加一個或多個*.sql, *.sql.gz, or *.sh /docker-entrypoint-initdb.d (必要時創建目錄)。 在入口點調用 initdb 以創建默認的 postgres 用戶和數據庫后,它將運行任何*.sql文件,運行任何可執行的 *.sh 腳本,並獲取在該目錄中找到的任何不可執行的*.sh腳本以在之前進行進一步初始化啟動服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM