Docker:在Docker compose中用secret替换文件内容



我正在尝试使用docker和docker compose来设置一个带有模式和一些用户的数据库。用户是web应用程序的系统用户,为了安全起见,它需要一个密码。为了做到这一点,我想我可以简单地用secret中的值替换文件中的模板值。然而,这并不奏效。

用机密中的值替换文件内容的正确方法是什么

Dockerfile

FROM postgres:12.4
EXPOSE 5432
COPY 00_users.sql /docker-entrypoint-initdb.d/
COPY 01_schema.sql /docker-entrypoint-initdb.d/
RUN sed -i "s/__SECRETPASSWORD__/$(cat /run/secrets/postgres-secret)/g" /docker-entrypoint-initdb.d/00_users.sql

码头工人

version: '3.1'
services:
my-db:
build: ./my-db
container_name: my-postgres
volumes:
- ntool-data:/var/lib/postgresql/data
ports:
- 5432:5432
environment:
- POSTGRES_DB=mydb
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD_FILE=/run/secrets/postgres-passwd
secrets:
- postgres-passwd
- postgres-secret

secrets:
postgres-passwd:
file: postgres-passwd.txt
postgres-secret:
file: postgres-secret.txt

输出为:

Step 5/5 : RUN sed -i "s/__VCNTOOLPASSWORD__/$(cat /run/secrets/postgres-secret)/g" /docker-entrypoint-initdb.d/00_users.sql
---> Running in 012dd81c830b
cat: /run/secrets/postgres-secret: No such file or directory

我最终创建了这个00_users.sh脚本并将其放入/docker-entrypoint-initdb.d/

Dockerfile

FROM postgres:12.4
EXPOSE 5432
COPY 00_users.sh /docker-entrypoint-initdb.d/

内容:

#!/bin/bash
set -e
MYPASS=$(cat /run/secrets/postgres-secret)

psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE USER secretuser SUPERUSER ;
ALTER USER secretuser WITH PASSWORD '${MYPASS}';
EOSQL

最新更新