Нет смысла защищать секреты внутри контейнеров, как уже было сказано, если есть доступ к контейнеру, их в любом случае раскроют.
Озаботьтесь тем, чтобы при сборке и деплое контейнера секреты не передавались в открытом виде (в зависимости от инструмента деплоя - разные методы защиты, например в ansible используйте ansible-vault, если docker-compose, используйте файлы, которые маунтят секрет, чтобы не писать в compose файле секрет в открытом виде) :
version: '3.8'
secrets:
db_password:
file: ./secrets/db_password.txt # Путь к локальному файлу с секретами
services:
database:
image: postgres
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
secrets:
- db_password
Секрет у вас будет маунтиться в /run/secrets/, но надо все равно использовать внешний файл с паролем.
В swarm чуть более удобно - пароль берётся из секрета, который создаётся заранее
docker swarm init
docker secret create <secret_name> <file_path>
или
echo "mysecretvalue" | docker secret create <secret_name> -
version: '3.8'
secrets:
db_password:
external: true # Указывает, что секрет уже создан в swarm
services:
database:
image: postgres
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
secrets:
- db_password