У нас есть следующее Докерфайл:
ОТ 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.