[英]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
進程。 該過程應從CMD
或entrypoint
開始。
最好使用官方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 圖像的一些優勢
一切你需要的
# 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.