首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待服务postgres启动dockerfile

等待服务postgres启动dockerfile
EN

Stack Overflow用户
提问于 2019-11-06 03:59:52
回答 1查看 599关注 0票数 0

我正在使用docker文件来构建ubuntu映像,并安装postgresql。但我等不及了,邮递员的状态好吧

代码语言:javascript
复制
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会抛出错误,因为service还没有在RUN service postgresql start之后启动。我怎么能这么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-06 04:47:57

首先,Dockerfile中在单独的shell中运行的每个运行命令和RUN命令都应该用于安装或配置,而不是用于starting进程。这个过程应该在CMDentrypoint中启动。

运行与CMD

最好使用正式的靠岸图像

代码语言:javascript
复制
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres

默认postgres用户和数据库是在initdb的入口点中创建的。或者你也可以建立你的形象的基础上的母线。

代码语言:javascript
复制
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的默认用户。

浅谈涉外码头形象的优势

  • 从ENV创建DB
  • 从ENV创建DB用户
  • 用种子数据启动容器
  • 将等待postgres启动并运行

你所需要的一切

代码语言:javascript
复制
# Use postgres/example user/password credentials
version: '3.1'

services:

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

初始化脚本

如果您希望在从该映像派生的图像中进行额外的初始化,请在*.sql, *.sql.gz, or *.sh下添加一个或多个/docker-entrypoint-initdb.d脚本(必要时创建目录)。在入口点调用initdb以创建默认的postgres用户和数据库之后,它将运行任何*.sql文件,运行任何可执行的*.sh脚本,并在该目录中找到任何不可执行的*.sh脚本,以便在启动服务之前进行进一步的初始化。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58722896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档