2017-10-27 3 views
1

postgres 10.0을 도커 컨테이너에서 사용하려고합니다.docker alpine linux container에있는 Postgres

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"] 

것은 내가 오류 다음있어 : 나는 Dockerfile 다음이

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

/etc/init.d/postgresql 정말없는 것 같다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

0

나는이 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은, 포스트 그레스와 세트 기본 사용자 암호

를 시작

0

dockerfile에는 많은 문제가 있습니다. 메인 데이터베이스를 만들기 위해 이미지를 만들 때 서버를 시작하려고합니다. 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 
관련 문제