Điểm:0

Docker: lỗi không thể dịch tên máy chủ thành địa chỉ: Tên hoặc dịch vụ không xác định trong psql

lá cờ et

Chúng tôi có những điều sau đây Dockerfile:

TỪ debian:ổn định-mỏng

ARG DEBIAN_FRONTEND=không tương tác

CHẠY apt-get update && apt-get full-upgrade -y && apt-get install -y --no-install-recommends \
    hệ thống \
    procps \
    apt-utils \
    xây dựng cần thiết \
    postgresql-server-dev-all \
    postgresql-plpython3-13 \
    pgxnclient\
    libc6-dev \
    quên \
    trăn3 \
    python3-pip \
    python-is-python3 \
 && rm -rf /var/lib/apt/lists/*

# Nhập tệp nguồn vào hình ảnh
CHẠY mkdir/docker
CÔNG VIỆC / docker
SAO CHÉP . / docker

# Cài đặt PostgreSQL Faker
CHẠY python3 -m pip install --upgrade pip && pip3 install Faker==6.1.1 && \
    pgxn cài đặt postgresql_faker

# Cài đặt tiện ích mở rộng ẩn danh
#RUN cd src && thực hiện && thực hiện cài đặt
CHẠY pwd
CHẠY ls ​​-lsa

# tập lệnh khởi tạo
CHẠY mkdir -p /docker/docker-entrypoint-initdb.d
SAO CHÉP ./init_anon.sh /docker/docker-entrypoint-initdb.d/init_anon.sh

# Điểm vào thay thế
SAO CHÉP ./anon.sh /docker/anon.sh
SAO CHÉP ./init_anon.sh /docker/init_anon.sh

CHẠY /docker/docker-entrypoint-initdb.d/init_anon.sh

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

... và sau đây docker-compose.yml:

phiên bản: '3'

dịch vụ:
  PostgreSQLAnonymizer:
    container_name: PostgreSQLAnonymizer
    tên máy chủ: PostgreSQLAnonymizer
    hình ảnh: postgresql_anonymizer
    xây dựng: .
    #hình ảnh: registry.gitlab.com/dalibo/postgresql_anonymizer
    cổng:
      - "5432:5432"
    môi trường:
      - HOSTNAME=PostgreSQLAnonymizer
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=bí mật
      - PGUSER=postgres # cần thiết cho `thực hiện kiểm tra cài đặt`
      - POSTGRES_USER=postgres
    mạng:
      - mạng postgres
    #lệnh: /usr/bin/postgres -c shared_preload_libraries='anon'
    lệnh: /bin/systemctl khởi động lại postgresql && su postgres -c "/usr/bin/psql -U postgres -p 5432 -h PostgreSQLAnonymizer -c shared_preload_libraries='anon' postgres"
    working_dir: /tmp/source
    khối lượng:
      - $PWD:/tmp/nguồn
    #- $PWD/anon:/usr/share/postgresql/10/extension/anon
    #
mạng:
  mạng postgres:

Điểm vào tùy chỉnh (init_anon.sh) trông giống như sau:

#!/bin/sh

đặt -e

# Thực hiện tất cả các hành động với tư cách $POSTGRES_USER
xuất PGUSER="$POSTGRES_USER"

# việc này đơn giản hơn việc cập nhật shared_preload_libraries trong postgresql.conf
echo "Đang tải phần mở rộng cho tất cả các phiên tiếp theo"
psql -h PostgreSQLAnonymizer -p 5432 -U postgres --dbname="postgres" -c "ALTER SYSTEM SET session_preload_libraries = 'anon';"
psql -h PostgreSQLAnonymizer -p 5432 -U postgres --dbname="postgres" -c "CHỌN pg_reload_conf();"

echo "Tạo tiện ích mở rộng bên trong cơ sở dữ liệu template1 và postgres"
SQL="TẠO MỞ RỘNG NẾU KHÔNG TỒN TẠI trên CASCADE;"
psql -h PostgreSQLAnonymizer -p 5432 -U postgres --dbname="template1" -c "$SQL"
psql -h PostgreSQLAnonymizer -p 5432 -U postgres --dbname="postgres" -c "$SQL"

anon.sh:

#!/usr/bin/env bash

xuất PGDATA=/var/lib/postgresql/data/
xuất PGDATABASE=postgres
xuất PGUSER=postgres

{
mkdir -p $PGDATA
chown postgres $PGDATA
gosu postgres initdb
gosu postgres pg_ctl bắt đầu
gosu postgres psql -c "THAY ĐỔI HỆ THỐNG SET session_preload_libraries = 'anon';"
gosu postgres psql -c "CHỌN pg_reload_conf();"

con mèo | gosu postgres psql
} &> /dev/null

bin/pg_dump_anon.sh -U postgres

Chúng tôi đang cố gắng thiết lập dự án này để ẩn danh PII, PHI và tương tự.

Vấn đề là khi tại sao chúng ta cố gắng chạy xây dựng docker-compose lỗi sau xuất hiện:

> [13/13] CHẠY /docker/docker-entrypoint-initdb.d/init_anon.sh:
#0 0,312 Đang tải tiện ích mở rộng cho tất cả các phiên tiếp theo
#0 0,375 psql: lỗi: không thể dịch tên máy chủ "PostgreSQLAnonymizer" sang địa chỉ: Tên hoặc dịch vụ không xác định

Chúng tôi đã thử thiết lập một mạng tùy chỉnh, điều này không có ý nghĩa gì đối với một vùng chứa duy nhất, nhưng chúng tôi vẫn làm như vậy mà không có kết quả. Chúng tôi đã thử thiết lập máy chủ cục bộ, 127.0.0.1, 0.0.0.0 cho chuỗi kết nối và điều đó cũng không hoạt động. Bất kỳ đầu mối làm thế nào để khắc phục điều này?

Có, chúng tôi đã phải sửa đổi mã ban đầu một chút vì mã không chính xác, trong số các lý do khác đó là phiên bản Python là 3.5, không bao gồm phiên bản gói Faker bắt buộc (chỉ tối đa 5.0.0 nếu tôi nhớ chính xác) và do đó chúng tôi phải thực hiện những thay đổi này.

chúng tôi phải Nhân tiện, hãy sử dụng PostgreSQL 9.3.

lá cờ in
Chỉ cần thêm mục bị thiếu vào tệp máy chủ bên trong vùng chứa?
lá cờ in
Một vấn đề khác là dường như bạn cố gắng kết nối với postgresqld mà không khởi động nó trước.
Munchkin avatar
lá cờ et
@GeraldSchneider không được thực hiện tự động, chúng tôi đã chỉ định tên máy chủ? Tôi nghĩ nó nên được bắt đầu?.. Chúng tôi đã viết ` /bin/systemctl restart postgresql ` cũng chỉ cho trường hợp này.
lá cờ in
`điều đó không được thực hiện tự động` phải không, khi bạn thực sự bắt đầu một vùng chứa. Nhưng bạn chạy tập lệnh `init_anon.sh` trong giai đoạn xây dựng, đây không phải là trường hợp. Tại thời điểm này, postgresqld cũng không chạy.
Munchkin avatar
lá cờ et
@GeraldSchneider oooh đó là một điểm tốt, sau đó chúng ta cần khởi tạo nó như thế nào?
Điểm:1
lá cờ in

Vấn đề là bạn đang chạy init_anon.sh ở giai đoạn xây dựng. Tại thời điểm đó, không có tên máy chủ của vùng chứa trong/etc/hosts và máy chủ postgresql thậm chí không chạy.

Bạn có thể thêm tên máy chủ trong giai đoạn xây dựng và khởi động trình nền trước khi chạy tập lệnh hoặc bạn chạy tập lệnh init trong lần khởi động đầu tiên của vùng chứa.

nếu [ ! -f /khởi tạo ]; sau đó
  /docker/docker-entrypoint-initdb.d/init_anon.sh
  chạm/khởi tạo
fi
Munchkin avatar
lá cờ et
Umm làm thế nào để bạn thực hiện chính xác điều này? Trong `init_anon.sh`?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.