Closed xaduha closed 7 years ago
In fact the detection mechanism of environment variables based on link is deprecated since the version 2 of compose file format https://docs.docker.com/compose/link-env-deprecated/ In version 2 you can use somehing like this :
Prepare the configuration script to set max_prepared_transactions to 100 in Postgres:
mkdir -p custom_postgres
echo '#!/bin/bash' > custom_postgres/bonita.sh
echo 'sed -i "s/^.*max_prepared_transactions\s*=\s*\(.*\)$/max_prepared_transactions = 100/" "$PGDATA"/postgresql.conf' >> custom_postgres/bonita.sh
chmod +x custom_postgres/bonita.sh
Note that to avoid issues you may want to wait for postgres startup as described here https://hub.docker.com/_/postgres/
Caveats If there is no database when postgres starts in a container, then postgres will create the default database for you. While this is the expected behavior of postgres, this means that it will not accept incoming connections during that time. This may cause issues when using automation tools, such as docker-compose, that start several containers simultaneously.
https://docs.docker.com/compose/startup-order/
cat > wait-for-postgres.sh <<- EOM
#!/bin/bash
# wait-for-postgres.sh
set -e
host="\$1"
shift
cmd="\$@"
PGPASSWORD=\$POSTGRES_ENV_POSTGRES_PASSWORD
export PGPASSWORD
until psql -h "\$host" -U "postgres" -c '\l'; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
>&2 echo "Postgres is up - executing command"
exec \$cmd
EOM
chmod +x wait-for-postgres.sh
Set the environments variables of Bonita to change the default credentials :
cat > env.txt <<- EOM
TENANT_LOGIN=tech_user
TENANT_PASSWORD=secret
PLATFORM_LOGIN=pfadmin
PLATFORM_PASSWORD=pfsecret
EOM
Create the corresponding docker-compose file :
cat > docker-compose.yml <<- EOM
version: '2'
services:
db:
image: postgres:9.3
environment:
POSTGRES_PASSWORD: example
volumes:
- ./custom_postgres/:/docker-entrypoint-initdb.d
bonita:
image: bonita:7.5.1
ports:
- 8080:8080
env_file:
- ./env.txt
environment:
- POSTGRES_ENV_POSTGRES_PASSWORD=example
- DB_VENDOR=postgres
- DB_HOST=db
volumes:
- ./wait-for-postgres.sh:/wait-for-postgres.sh
depends_on:
- db
command: ["/wait-for-postgres.sh", "db", "/opt/files/startup.sh"]
EOM
docker-compose up
should work fine with this example.
thanks!
stack.yml example added into the doc
When trying to link it with postgres or mysql. I tried all kinds of combinations with legacy https://docs.docker.com/compose/compose-file/#external_links, with normal https://docs.docker.com/compose/compose-file/#links, specifying DB_* variables too.
Would be nice if you could provide an example
docker-compose.yml
file and improve whatever detection mechanism that you use. It works just fine from command line, but not with docker-compose. Thanks!