Puncte:0

Docker: eroarea nu a putut traduce numele gazdei în adresă: Numele sau serviciul necunoscut în psql

drapel et

Avem următoarele Dockerfile:

DE LA debian:stable-slim

ARG DEBIAN_FRONTEND=neinteractiv

RUN apt-get update && apt-get full-upgrade -y && apt-get install -y --no-install-recommends \
    systemd \
    procps \
    apt-utils \
    esențial pentru construcție \
    postgresql-server-dev-all \
    postgresql-plpython3-13 \
    pgxnclient \
    libc6-dev \
    wget \
    python3 \
    python3-pip \
    python-is-python3 \
 && rm -rf /var/lib/apt/lists/*

# Importați fișiere sursă în imagine
RUN mkdir /docker
WORKDIR /docker
COPIE . /docher

# Instalați PostgreSQL Faker
RUN python3 -m pip install --upgrade pip && pip3 install Faker==6.1.1 && \
    pgxn instalează postgresql_faker

# Instalați extensia anon
#RUN cd src && make && make install
RUN pwd
RUN ls -lsa

# script de pornire
RUN mkdir -p /docker/docker-entrypoint-initdb.d
COPIEAZĂ ./init_anon.sh /docker/docker-entrypoint-initdb.d/init_anon.sh

# Punct de intrare alternativ
COPIEAZĂ ./anon.sh /docker/anon.sh
COPIEAZĂ ./init_anon.sh /docker/init_anon.sh

RUN /docker/docker-entrypoint-initdb.d/init_anon.sh

ENTRYPOINT ["/docker/docker-entrypoint-initdb.d/anon.sh"]

...si urmatoarele docker-compose.yml:

versiunea: '3'

Servicii:
  PostgreSQLAnonymizer:
    container_name: PostgreSQLAnonymizer
    Nume gazdă: PostgreSQLAnonymizer
    imagine: postgresql_anonymizer
    construi: .
    #image: registry.gitlab.com/dalibo/postgresql_anonymizer
    porturi:
      - „5432:5432”
    mediu inconjurator:
      - HOSTNAME=PostgreSQLAnonymizer
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=secret
      - PGUSER=postgres # necesar pentru `face installcheck`
      - POSTGRES_USER=postgres
    retele:
      - rețea postgres
    #comandă: /usr/bin/postgres -c shared_preload_libraries='anon'
    comandă: /bin/systemctl restart postgresql && su postgres -c "/usr/bin/psql -U postgres -p 5432 -h PostgreSQLAnonymizer -c shared_preload_libraries='anon' postgres"
    work_dir: /tmp/source
    volume:
      - $PWD:/tmp/source
    #- $PWD/anon:/usr/share/postgresql/10/extension/anon
    #
retele:
  postgres-network:

Punctul de intrare personalizat (init_anon.sh) arată astfel:

#!/bin/sh

set -e

# Efectuați toate acțiunile ca $POSTGRES_USER
export PGUSER="$POSTGRES_USER"

# acest lucru este mai simplu decât actualizarea shared_preload_libraries în postgresql.conf
echo „Se încarcă extensia pentru toate sesiunile ulterioare”
psql -h PostgreSQLAnonymizer -p 5432 -U postgres --dbname="postgres" -c "ALTER SISTEM SET session_preload_libraries = 'anon';"
psql -h PostgreSQLAnonymizer -p 5432 -U postgres --dbname="postgres" -c "SELECT pg_reload_conf();"

echo „Crearea extensiei în bazele de date template1 și postgres”
SQL="CREATE EXTENSION IF NOT EXISTS anon CASCADE;"
psql -h PostgreSQLAnonymizer -p 5432 -U postgres --dbname="template1" -c "$SQL"
psql -h PostgreSQLAnonymizer -p 5432 -U postgres --dbname="postgres" -c "$SQL"

Si anon.sh:

#!/usr/bin/env bash

export PGDATA=/var/lib/postgresql/data/
export PGDATABASE=postgres
export PGUSER=postgres

{
mkdir -p $PGDATA
chown postgres $PGDATA
gosu postgres initdb
gosu postgres pg_ctl start
gosu postgres psql -c "ALTER SYSTEM SET session_preload_libraries = 'anon';"
gosu postgres psql -c „SELECT pg_reload_conf();”

pisica | gosu postgres psql
} &> /dev/null

bin/pg_dump_anon.sh -U postgres

Încercăm să instalăm acest proiect pentru anonimizarea PII, PHI și similare.

Problema este că atunci când încercăm să alergăm docker-compose build apare urmatoarea eroare:

> [13/13] RUN /docker/docker-entrypoint-initdb.d/init_anon.sh:
#0 0.312 Se încarcă extensia pentru toate sesiunile ulterioare
#0 0.375 psql: eroare: nu s-a putut traduce numele gazdei „PostgreSQLAnonymizer” la adresa: Numele sau serviciul nu se cunoaște

Am încercat să creăm o rețea personalizată, ceea ce nu are sens pentru un singur container, dar am făcut-o oricum fără niciun rezultat. Am încercat să setăm gazdă locală, 127.0.0.1, 0.0.0.0 pentru șirul de conexiune și nici asta nu a funcționat. Aveți vreo idee cum să remediați asta?

Da, a trebuit să modificăm puțin codul original, deoarece codul era incorect, printre alte motive a fost faptul că versiunea Python era 3.5, care nu include versiunea necesară a pachetului Faker (doar până la 5.0.0 dacă îmi amintesc). corect) și, prin urmare, a trebuit să facem aceste modificări.

Noi Trebuie să apropo, utilizați PostgreSQL 9.3.

drapel in
Doar adăugați intrarea lipsă în fișierul hosts din interiorul containerului?
drapel in
O altă problemă ar fi că se pare că încercați să vă conectați la postgresqld fără a-l porni mai întâi.
Munchkin avatar
drapel et
@GeraldSchneider nu se face automat, am specificat numele de gazdă? Cred că ar trebui pornit?.. Am scris ` /bin/systemctl restart postgresql ` doar pentru acest caz.
drapel in
`nu se face automat` da, atunci când de fapt porniți un container. Dar rulați scriptul `init_anon.sh` în timpul fazei de construire, unde nu este cazul. În acest moment, nici postgresqld nu rulează.
Munchkin avatar
drapel et
@GeraldSchneider oooh, asta e un punct bun, cum trebuie să-l inițializam atunci?
Puncte:1
drapel in

Problema este că alergi init_anon.sh la faza de construire. În acel moment, nu există un nume de gazdă al containerului în /etc/hosts, iar serverul postgresql nici măcar nu rulează.

Puteți fie să adăugați numele de gazdă în timpul fazei de construire și să porniți demonul înainte de a rula scriptul, fie să rulați init-script-ul la prima pornire a containerului.

dacă [ ! -f /inițializat ]; atunci
  /docker/docker-entrypoint-initdb.d/init_anon.sh
  atingere/inițializată
fi
Munchkin avatar
drapel et
Umm cum implementezi asta mai exact? În `init_anon.sh`?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.