I am try to use secrets(from file – db_password.txt – content: root) in docker-compose.
->docker-compose -f compose-prod-replicaset.yml up –build –force-recreate
The secret is being mounted in "run/secrets/db_password" folder, normally; See that:
[0m total 8
[0m drwxr-xr-x 2 root root 4096 Apr 22 19:34 .
[0m drwxr-xr-x 1 root root 4096 Apr 22 19:34 ..
[0m -rwxrwxrwx 1 root root 4 Apr 22 17:24 db_password
However, when I have tried to use this secret as a environmental variable(db_password), the secret is being as its secret’s path, in "plain text"(run/secrets/db_password);
My versions are:
- Docker version 20.10.13, build a224086
- docker-compose version 1.29.2, build 5becea4c
I have used the docker-compose to create a mongodb uri, as you can see the username is "root", BUT the password is being bind as "run/secrets/db_password". For example:
- mongodb://root:run/secrets/db_password@mongo1:27017/devtestdb?authSource=admin
version: "3.9"
networks:
api-net:
services:
mongo1:
container_name: mongo1
image: mongo:4.4.4
restart: always
ports:
- "27017:27017"
networks:
- api-net
volumes:
- ./db-test:/data/db
api:
container_name: api
image: pauloportfolio/api
build:
context: ../
dockerfile: ./docker/Dockerfile
args:
JAR_FILE: target/*.jar
ports:
- "8080:8080"
volumes:
- ./db-test:/data/db
depends_on:
- mongo1
networks:
- api-net
secrets:
- db_password
environment:
HOST_DB: mongo1
PORT_DB: 27017
AUTH_DB: admin
STD_DB: devtestdb
STD_USER: root
PASS_FILE: run/secrets/db_password
PORT_API: 8080
DEBUG_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -Xmx1G -Xms128m -XX:MaxMetaspaceSize=128m
secrets:
db_password:
file: ./db_password.txt
Please, any help is useful.
Thanks a lot
2
Answers
Might I recommend using an
.env
file with docker-compose:Then, you can pass the variable to the container.
In your code, you will need to reference the
${MONGODB_PASSWORD}
environment variable.If you want to load a secrets file into an environment variable, the Official MySQL Docker Image has a solution for you.
See
docker_setup_env()
andfile_env()
functions indocker-entrypoint.sh
e.g. –
Results in loading the contents of
/run/secrets/mysql-root
intoMYSQL_ROOT_PASSWORD