我正在使用docker文件来构建ubuntu映像,并安装postgresql。但我等不及了,邮递员的状态好吧
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之后启动。我怎么能这么做?
发布于 2019-11-06 04:47:57
首先,Dockerfile中在单独的shell中运行的每个运行命令和RUN命令都应该用于安装或配置,而不是用于starting进程。这个过程应该在CMD或entrypoint中启动。
最好使用正式的靠岸图像。
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres默认postgres用户和数据库是在initdb的入口点中创建的。或者你也可以建立你的形象的基础上的母线。
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的默认用户。
浅谈涉外码头形象的优势
你所需要的一切
# 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脚本,以便在启动服务之前进行进一步的初始化。
https://stackoverflow.com/questions/58722896
复制相似问题