У нас есть следующее Докерфайл
:
ОТ debian: стабильный-тонкий
ARG DEBIAN_FRONTEND=неинтерактивный
RUN apt-get update && apt-get full-upgrade -y && apt-get install -y --no-install-recommends \
системный \
процедуры \
apt-утилиты \
необходимая сборка \
postgresql-сервер-dev-все \
postgresql-plpython3-13 \
pgxnclient \
libc6-dev \
wget \
питон3 \
python3-пип \
питон-это-питон3 \
&& rm -rf /var/lib/apt/lists/*
# Импорт исходных файлов в образ
ЗАПУСК mkdir/докер
РАБОЧИЙ КАТАЛОГ /докер
КОПИРОВАТЬ . /докер
# Установить подделку PostgreSQL
RUN python3 -m pip install --upgrade pip && pip3 install Faker==6.1.1 && \
pgxn установить postgresql_faker
# Установить анонимное расширение
#RUN cd src && make && make install
ПУСК пароль
ВЫПОЛНИТЬ ls -lsa
# скрипт инициализации
ВЫПОЛНИТЬ mkdir -p /docker/docker-entrypoint-initdb.d
КОПИРОВАТЬ ./init_anon.sh /docker/docker-entrypoint-initdb.d/init_anon.sh
# Альтернативная точка входа
КОПИРОВАТЬ ./anon.sh /docker/anon.sh
КОПИРОВАТЬ ./init_anon.sh /docker/init_anon.sh
ЗАПУСК /docker/docker-entrypoint-initdb.d/init_anon.sh
ТОЧКА ВХОДА ["/docker/docker-entrypoint-initdb.d/anon.sh"]
... и следующее докер-compose.yml
:
версия: '3'
Сервисы:
PostgreSQLАнонимайзер:
имя_контейнера: PostgreSQLAnonymizer
имя хоста: PostgreSQLAnonymizer
изображение: postgresql_anonymizer
строить: .
#изображение:Registry.gitlab.com/dalibo/postgresql_anonymizer
порты:
- "5432:5432"
среда:
- HOSTNAME=PostgreSQLAnonymizer
- POSTGRES_DB=постгрес
- POSTGRES_PASSWORD=секрет
- PGUSER=postgres # требуется для `make installcheck`
- POSTGRES_USER=постгрес
сети:
- postgres-сеть
#команда: /usr/bin/postgres -c shared_preload_libraries='anon'
команда: /bin/systemctl перезапустить postgresql && su postgres -c "/usr/bin/psql -U postgres -p 5432 -h PostgreSQLAnonymizer -c shared_preload_libraries='anon' postgres"
рабочий_каталог: /tmp/источник
тома:
- $PWD:/tmp/источник
#- $PWD/анон:/usr/доля/postgresql/10/расширение/анон
#
сети:
postgres-сеть:
Пользовательская точка входа (init_anon.sh
) выглядит следующим образом:
#!/бин/ш
установить -е
# Выполняем все действия как $POSTGRES_USER
экспортировать PGUSER="$POSTGRES_USER"
# это проще, чем обновить shared_preload_libraries в postgresql.conf
echo "Загружается расширение для всех последующих сессий"
psql -h PostgreSQLAnonymizer -p 5432 -U postgres --dbname="postgres" -c "ИЗМЕНИТЬ НАБОР СИСТЕМЫ session_preload_libraries = 'anon';"
psql -h PostgreSQLAnonymizer -p 5432 -U postgres --dbname="postgres" -c "SELECT pg_reload_conf();"
echo "Создание расширения внутри баз данных template1 и postgres"
SQL="СОЗДАТЬ РАСШИРЕНИЕ, ЕСЛИ НЕ СУЩЕСТВУЕТ, в КАСКАД;"
psql -h PostgreSQLAnonymizer -p 5432 -U postgres --dbname="template1" -c "$SQL"
psql -h PostgreSQLAnonymizer -p 5432 -U postgres --dbname="postgres" -c "$SQL"
И анон.ш
:
#!/usr/bin/env bash
экспортировать PGDATA=/var/lib/postgresql/data/
экспортировать PGDATABASE=postgres
экспортировать PGUSER=postgres
{
mkdir -p $PGDATA
chown postgres $PGDATA
gosu postgres initdb
gosu postgres pg_ctl start
gosu postgres psql -c "ИЗМЕНИТЬ НАБОР СИСТЕМЫ session_preload_libraries = 'anon';"
gosu postgres psql -c "SELECT pg_reload_conf();"
кошка | госу постгрес psql
} &> /dev/null
bin/pg_dump_anon.sh -U postgres
Мы пытаемся настроить этот проект для анонимизации PII, PHI и т.п.
Проблема в том, что когда мы пытаемся запустить сборка с докером
появляется следующая ошибка:
> [13/13] ЗАПУСК /docker/docker-entrypoint-initdb.d/init_anon.sh:
#0 0.312 Загрузка расширения для всех последующих сессий
# 0 0,375 psql: ошибка: не удалось преобразовать имя хоста «PostgreSQLAnonymizer» в адрес: имя или служба не известны
Мы пробовали настроить собственную сеть, что не имеет смысла для одного контейнера, но все равно безрезультатно. Мы попытались установить локальный хост
, 127.0.0.1
, 0.0.0.0
для строки подключения, и это тоже не сработало. Любая подсказка, как это исправить?
Да, нам пришлось немного изменить исходный код, потому что код был неправильным, в том числе из-за того, что версия Python была 3.5, которая не включала требуемую версию пакета Faker (только до 5.0.0, насколько я помню). правильно) и, следовательно, мы должны были внести эти изменения.
Мы придется кстати используйте PostgreSQL 9.3.