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"
Và 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.