Я пытаюсь докеризировать приложение с помощью 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, без какого-либо внешнего сценария. Кто-нибудь предлагает?