Postgres在docker工人高山linux容器

我正在试图让docker容器中的postgres 10.0工作。 我有以下Dockerfile:

FROM postgres:10.0-alpine RUN apk add openrc --no-cache USER postgres RUN /etc/init.d/postgresql start RUN psql --command "IF NOT EXISTS (SELECT FROM pg_catalog.pg_user WHERE usename = 'user') THEN CREATE USER user WITH SUPERUSER ENCRYPTED PASSWORD 'password'; END IF;" RUN createdb main EXPOSE 5432 VOLUME ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"] CMD ["/usr/lib/postgresql/10.0/bin/postgres", "-D", "/var/lib/postgresql/10.0/main", "-c", "config_file=/etc/postgresql/10.0/main/postgresql.conf"] 

我有以下错误:

 /bin/sh: /etc/init.d/postgresql: not found 

似乎/etc/init.d/postgresql是真的缺less。 我究竟做错了什么?

dockerfile有很多问题。 我想你正试图build立图像创build主数据库时启动服务器。 这将不起作用,因为dockefile中的每个命令都将在其自己的层中执行,因此,当您RUN psql ... ,数据库将不会启动,因为它是在不同的层中启动的。 所以你需要将这些命令分成一行。

第二个问题,是/etc/init.d/postgresql文件不存在。 服务器可以使用postgres命令启动。

 RUN postgres &\ psql --command "IF NOT EXISTS (SELECT FROM pg_catalog.pg_user WHERE usename = 'user')\ THEN CREATE USER user WITH SUPERUSER ENCRYPTED PASSWORD 'password'; END IF;" &\ createdb main 

我完成了这个Dockerfile:

 FROM postgres:10.0-alpine USER postgres RUN chmod 0700 /var/lib/postgresql/data &&\ initdb /var/lib/postgresql/data &&\ echo "host all all 0.0.0.0/0 md5" >> /var/lib/postgresql/data/pg_hba.conf &&\ echo "listen_addresses='*'" >> /var/lib/postgresql/data/postgresql.conf &&\ pg_ctl start &&\ psql -U postgres -tc "SELECT 1 FROM pg_database WHERE datname = 'main'" | grep -q 1 || psql -U postgres -c "CREATE DATABASE main" &&\ psql --command "ALTER USER postgres WITH ENCRYPTED PASSWORD 'mysecurepassword';" EXPOSE 5432 

这个dockerfile创build数据库'main'(如果不存在),启动postgres并设置默认的用户密码