我正在使用docker文件构建ubuntu映像,并已安装postgresql。但是我等不及服务postgres的状态了
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
之后尚未启动服务postgresql。我该怎么办?
答案 0 :(得分:2)
首先,Dockerfile中的每个RUN命令都在单独的外壳中运行,RUN
命令应用于starting
进程的安装或配置。该过程应从CMD
或entrypoint
开始。
最好使用官方postgress docker image。
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
初始化脚本
如果您想对派生的图像进行其他初始化 在这一项中,在下面添加一个或多个
*.sql, *.sql.gz, or *.sh
脚本/docker-entrypoint-initdb.d
(必要时创建目录)。 在入口点调用initdb之后,创建默认的postgres用户 和数据库,它将运行任何*.sql
文件,运行任何可执行文件* .sh 脚本,并在其中找到任何不可执行的*.sh
脚本 目录以在启动服务之前进行进一步的初始化。