【发布时间】:2018-02-22 07:06:40
【问题描述】:
我有以下 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
第三方应用程序启动.sh:
#!/bin/bash
set -e
service third-party-app start
但同样的事情也会发生。容器以错误状态码 1 退出。
但是当我在容器启动后通过 PowerShell 手动执行命令时,它工作得非常好。
有没有更好的方法来做到这一点?
或者有没有办法获取该命令出错的详细错误日志?
【问题讨论】:
标签: postgresql shell docker dockerfile