Score:0

นักเทียบท่า: ข้อผิดพลาดไม่สามารถแปลชื่อโฮสต์เป็นที่อยู่: ไม่รู้จักชื่อหรือบริการใน psql

ธง et

เรามีดังต่อไปนี้ ไฟล์นักเทียบท่า:

จากเดเบียน:เสถียร-บาง

ARG DEBIAN_FRONTEND=ไม่โต้ตอบ

RUN apt-get update && apt-get full-upgrade -y && apt-get install -y --no-install-recommends \
    systemd \
    อุปกรณ์ประกอบฉาก \
    ฉลาด-utils \
    สิ่งจำเป็นในการสร้าง \
    postgresql-server-dev-all \
    postgresql-plpython3-13 \
    pgxnclient \
    libc6-dev \
    wget \
    หลาม 3 \
    หลาม 3-pip \
    หลามเป็น python3 \
 && rm -rf /var/lib/apt/lists/*

# นำเข้าไฟล์ต้นฉบับลงในภาพ
รัน mkdir /docker
WORKDIR /นักเทียบท่า
สำเนา /นักเทียบท่า

# ติดตั้ง PostgreSQL Faker
RUN python3 -m pip install --upgrade pip && pip3 ติดตั้ง Faker==6.1.1 && \
    pgxn ติดตั้ง postgresql_faker

# ติดตั้งส่วนขยายอานนท์
#RUN cd src && ทำ && ทำการติดตั้ง
รัน pwd
รัน ls -lsa

# สคริปต์เริ่มต้น
RUN 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

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

จุดเข้าใช้งาน ["/docker/docker-entrypoint-initdb.d/anon.sh"]

...และต่อไปนี้ นักเทียบท่า-compose.yml:

รุ่น: '3'

บริการ:
  PostgreSQLAnonymizer:
    container_name: 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='อานนท์'
    คำสั่ง: /bin/systemctl รีสตาร์ท postgresql && su postgres -c "/usr/bin/psql -U postgres -p 5432 -h PostgreSQLAnonymizer -c shared_preload_libraries='anon' postgres"
    working_dir: /tmp/source
    ปริมาณ:
      - $PWD:/tmp/source
    #- $PWD/anon:/usr/share/postgresql/10/extension/anon
    #
เครือข่าย:
  postgres เครือข่าย:

จุดเริ่มต้นที่กำหนดเอง (init_anon.sh) มีลักษณะดังต่อไปนี้:

#!/bin/sh

ตั้ง -e

# ดำเนินการทั้งหมดในฐานะ $POSTGRES_USER
ส่งออก PGUSER="$POSTGRES_USER"

# ซึ่งง่ายกว่าการอัปเดต shared_preload_libraries ใน postgresql.conf
echo "กำลังโหลดส่วนขยายสำหรับเซสชันต่อไปทั้งหมด"
psql -h PostgreSQLAnonymizer -p 5432 -U postgres --dbname="postgres" -c "เปลี่ยนการตั้งค่าระบบ session_preload_libraries = 'อานนท์';"
psql -h PostgreSQLAnonymizer -p 5432 -U postgres --dbname="postgres" -c "เลือก pg_reload_conf();"

echo "กำลังสร้างส่วนขยายภายในฐานข้อมูล template1 และ postgres"
SQL="สร้างส่วนขยายหากไม่มีอยู่ใน CASCADE;"
psql -h PostgreSQLAnonymizer -p 5432 -U postgres --dbname="template1" -c "$SQL"
psql -h PostgreSQLAnonymizer -p 5432 -U postgres --dbname="postgres" -c "$SQL"

และ อานนท์.sh:

#!/usr/bin/env ทุบตี

ส่งออก PGDATA=/var/lib/postgresql/data/
ส่งออก PGDATABASE=postgres
ส่งออก PGUSER=postgres

{
mkdir -p $PGDATA
chown postgres $PGDATA
gosu postgres initdb
gosu postgres pg_ctl เริ่มต้น
gosu postgres psql -c "เปลี่ยนระบบ SET session_preload_libraries = 'อานนท์';"
gosu postgres psql -c "เลือก pg_reload_conf();"

แมว | gosu postgres psql
} &> /dev/null

bin/pg_dump_anon.sh -U postgres

เรากำลังพยายามตั้งค่า โครงการนี้ สำหรับการไม่ระบุตัวตนของ PII, PHI และที่คล้ายกัน

ปัญหาคือเมื่อเราพยายามวิ่งทำไม สร้างนักเทียบท่าเขียน ข้อผิดพลาดต่อไปนี้ปรากฏขึ้น:

> [13/13] RUN /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 flag
เพียงเพิ่มรายการที่ขาดหายไปในไฟล์โฮสต์ภายในคอนเทนเนอร์
in flag
ปัญหาอีกประการหนึ่งคือคุณพยายามเชื่อมต่อกับ postgresqld โดยไม่เริ่มต้นก่อน
Munchkin avatar
et flag
@GeraldSchneider ไม่ได้ทำโดยอัตโนมัติ เราระบุชื่อโฮสต์หรือไม่ ฉันคิดว่ามันควรจะเริ่มต้นหรือไม่ .. เราเขียน ` /bin/systemctl restart postgresql ` เช่นกันสำหรับกรณีนี้
in flag
'นั่นไม่ได้ทำโดยอัตโนมัติ' ใช่เมื่อคุณเริ่มคอนเทนเนอร์จริง ๆ แต่คุณเรียกใช้สคริปต์ `init_anon.sh` ในระหว่างขั้นตอนการสร้าง ซึ่งไม่ใช่ในกรณีนี้ ณ จุดนี้ postgresqld ไม่ทำงานเช่นกัน
Munchkin avatar
et flag
@GeraldSchneider oooh นั่นเป็นจุดที่ดี เราต้องเริ่มต้นมันอย่างไร
Score:1
ธง in

ปัญหาคือคุณกำลังเรียกใช้ init_anon.sh ในขั้นตอนการสร้าง ณ จุดนี้ไม่มีชื่อโฮสต์ของคอนเทนเนอร์ใน /etc/hosts และเซิร์ฟเวอร์ postgresql ไม่ทำงานด้วยซ้ำ

คุณสามารถเพิ่มชื่อโฮสต์ระหว่างขั้นตอนการสร้างและเริ่ม daemon ก่อนที่คุณจะเรียกใช้สคริปต์ หรือเรียกใช้สคริปต์เริ่มต้นเมื่อเริ่มต้นคอนเทนเนอร์ครั้งแรก

ถ้า [ ! -f / เริ่มต้น ]; แล้ว
  /docker/docker-entrypoint-initdb.d/init_anon.sh
  สัมผัส / เริ่มต้น
ไฟ
Munchkin avatar
et flag
อืม คุณจะนำสิ่งนี้ไปใช้ได้อย่างไร ใน `init_anon.sh`?

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา