Рейтинг:0

Docker: ошибка не может преобразовать имя хоста в адрес: имя или служба не известны в psql

флаг et

У нас есть следующее Докерфайл:

ОТ 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.

флаг in
Просто добавить недостающую запись в файл hosts внутри контейнера?
флаг in
Другая проблема заключается в том, что вы пытаетесь подключиться к postgresqld, не запустив его сначала.
Munchkin avatar
флаг et
@GeraldSchneider, разве это не делается автоматически, мы указали имя хоста? Я думаю, что это должно быть запущено?.. Мы написали `/bin/systemctl перезапустить postgresql`, как раз для этого случая.
флаг in
`это не делается автоматически` да, когда вы фактически запускаете контейнер. Но вы запускаете скрипт `init_anon.sh` на этапе сборки, где это не так. На данный момент postgresqld также не работает.
Munchkin avatar
флаг et
@GeraldSchneider, ооо, это хороший момент, как нам тогда его инициализировать?
Рейтинг:1
флаг in

Проблема в том, что вы работаете init_anon.sh на этапе сборки. В этот момент в /etc/hosts нет имени хоста контейнера, а сервер postgresql даже не запущен.

Вы можете либо добавить имя хоста на этапе сборки и запустить демон перед запуском скрипта, либо запустить скрипт инициализации при первом запуске контейнера.

если [ ! -f/инициализирован]; тогда
  /docker/docker-entrypoint-initdb.d/init_anon.sh
  сенсорный / инициализированный
фи
Munchkin avatar
флаг et
Эм, как вы это реализуете? В `init_anon.sh`?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.