簡體   English   中英

Postgres Docker容器:啟動時運行命令

[英]Postgres Docker container: Run command on startup

我有以下Dockerfile使用第三方應用程序創建Postgres容器:

FROM postgres

COPY ./setup/third-party-app.deb /opt/third-party-app.deb
COPY ./setup/init_extensions-db.sql /docker-entrypoint-initdb.d/init_extensions-db.sql

RUN apt-get update -y
RUN apt-get install -y default-jre-headless
RUN dpkg -i /opt/third-party-app.deb
RUN service third-party-app init
RUN service third-party-app start

但是我注意到, service third-party-app start已在構建階段成功執行,但是該服務並未在運行的容器中啟動。
我發現原因是Docker映像無法快照正在運行的進程。 因此,我試圖找到一種在容器啟動后自動執行此命令的方法。

我在Dockerfile的末尾嘗試了以下代碼:

CMD postgres && service third-party-app start

但是容器以錯誤狀態代碼1退出。

我還嘗試將以下shell腳本復制到Postgres映像docker-entrypoint-initdb.d中:

COPY ./setup/third-party-app-start.sh /docker-entrypoint-initdb.d/third-party-app-start.sh

third-party-app-start.sh:

#!/bin/bash
set -e
service third-party-app start

但是,同樣的事情發生了。 容器退出,錯誤狀態代碼為1。

但是,當我在容器啟動后通過PowerShell手動執行命令時,它可以正常運行。

有沒有更好的方法可以做到這一點?
還是有辦法獲取該命令出了什么問題的詳細錯誤日志?

容器的主要運行過程是Dockerfile末尾的ENTRYPOINT和/或CMD。 通常建議您通過每個容器使用一項服務來分離關注區域。 該服務可以派生到多個進程中(例如,Apache Web服務器啟動多個工作進程)。 可以有多個進程,但是要從Docker中獲得最大收益,請避免一個容器負責整個應用程序的多個方面。 您可以使用用戶定義的網絡和共享卷連接多個容器。

為了實現您的目標,您將需要使用包裝腳本或主管,更多詳細信息: https : //docs.docker.com/config/containers/multi-service_container/

暫無
暫無

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

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