dockerfile из postgres: 12.1 установить часовой пояс postgis - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь докеризировать приложение с помощью postgres + postgis. Но у меня много проблем. Во-первых, я думаю начать с официального postgres образа, так что я могу самостоятельно установить postgis в docker -файл.

FROM postgres:12.1

MAINTAINER xxx

#ARG A_DB_USER='postgres'
#ARG A_DB_PASS='postgres'
ARG A_DB_NAME='mydb'
ARG A_TZ='Europe/Zurich'

#ENV DB_USER=${A_DB_USER}
#ENV DB_PASS=${A_DB_PASS}
ENV DB_NAME=${A_DB_NAME}
ENV TZ=${A_TZ}

# Adjusting Timezone in the system
RUN echo $TZ > /etc/timezone && \
    apt-get update && apt-get install -y tzdata && \
    rm /etc/localtime && \
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
    dpkg-reconfigure -f noninteractive tzdata && \
    apt-get clean

# install postgis
RUN apt-get update && \
    apt-get install -y postgis

USER postgres

#Add password "postgres" to user postgres, create db, add .sql
RUN /etc/init.d/postgresql start && \
    psql --command "ALTER USER ${DB_USER} WITH PASSWORD '${DB_PASS}'; SET TIME ZONE '${TZ}';" && \
    createdb -O ${DB_USER} ${DB_NAME} -E UTF8 && \
    psql -d ${DB_NAME} -c 'CREATE EXTENSION postgis'

EXPOSE 5432

Мне также нужно изменить часовой пояс (без тз env в postgres: 12.1), но я не могу запустить /etc/init.d/postgresql начать и так сделать остальной код. Лучше начать с образа Debian и установить postgres? Если это возможно, мне следует избегать сценария точки входа (я запускаю его с официальным postgres, но я не могу использовать точку входа также для установки postgis, и у меня в любом случае возникают другие проблемы, потому что я не могу опубликовать c этот файл: необходимо только один файл Docker) Спасибо

______________________________ РЕДАКТИРОВАТЬ ____________________________________ Я частично решил с этим файлом Docker:

FROM postgres:12.1

MAINTAINER xxx

#ARG A_DB_USER='postgres'
#ARG A_DB_PASS='postgres'
ARG A_DB_NAME='mydb'
ARG A_TZ='Europe/Zurich'

#ENV DB_USER=${A_DB_USER}
#ENV DB_PASS=${A_DB_PASS}
ENV DB_NAME=${A_DB_NAME}
ENV TZ=${A_TZ}

# Adjusting Timezone in the system
RUN echo $TZ > /etc/timezone && \
    apt-get update && apt-get install -y tzdata && \
    rm /etc/localtime && \
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
    dpkg-reconfigure -f noninteractive tzdata && \
    apt-get clean

# install postgis
RUN apt-get update && \
    apt-get install -y postgis && \
    apt-get clean

USER postgres

#Add password "postgres" to user postgres, create db, add .sql
#RUN /etc/init.d/postgresql start && \
#    psql --command "ALTER USER ${DB_USER} WITH PASSWORD '${DB_PASS}'; SET TIME ZONE '${TZ}';" && \
#    createdb -O ${DB_USER} ${DB_NAME} -E UTF8 && \
#    psql -d ${DB_NAME} -c 'CREATE EXTENSION postgis'

EXPOSE 5432

этот сценарий точки входа:

#!/bin/bash
set -e

psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
    SET TIME ZONE '${TZ}';
    CREATE DATABASE '${DB_NAME}' ENCODING 'UTF8';
EOSQL

psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$DB_NAME" <<-EOSQL
    CREATE EXTENSION postgis;

EOSQL

и этот docker состав:

version: '3.1'

services:

  myapp-db:
    build:
      context: ./
      dockerfile: Dockerfile-pg
    image: myapp-pg:1.0.0
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
#     POSTGRES_DB: mydb
    volumes:
       - ./docker-entrypoint-initdb.d/init-user-db.sh:/docker-entrypoint-initdb.d/init-user-db.sh

Я говорю частично, потому что, если возможно, я хочу выполнить команды psql, которые теперь находятся в сценарии точки входа непосредственно в файле docker, без какого-либо внешнего сценария. Кто-нибудь предлагает?

...