Rozumiem, że przy użyciu starszej wersji funkcji docker-compose możemy utworzyć inny kontener z tylko woluminem danych i połączyć go przy użyciu parametru volume_from, aby utworzyć kontener "tylko do danych". Jednak chciałem przetestować używając nowej składni.W jaki sposób utworzyć dokowanie-skomponować wersję 2, aby mieć trwałość postgres db przy użyciu woluminów?
version: '2'
services:
app:
build: .
links:
- psql
psql:
image: postgres
volumes_from:
- psqldata
ports:
- "5432:5432"
psqldata:
image: postgres
volumes:
- psqlvolumes:/var/lib/postgresql/data/
volumes:
psqlvolumes:
driver: local
Zostało to oparte na this post.
mam inny skrypt działa czekać aż ten pojemnik postgres jest się przed pozostałe pojemniki uruchomić na przykład:
container:
build: .
volumes:
- ./scripts/wait-for-postgres.sh:/code/wait-for-postgres.sh
entrypoint: ./wait-for-postgres.sh "command"
z skrypt wygląda jak:
#!/bin/bash
set -e
export PGPASSWORD=postgres
cmd="[email protected]"
until psql -h "postgres" -U "postgres" -c '\l'; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
>&2 echo "Postgres is up - executing command"
exec $cmd
ta została podjęta z witryna dokowania.
Prowadzi to tylko do tego, że pojemniki zwalniają i nie pojawiają się w ogóle i nie mogę nawet załadować kontenera PostgreSQL z tabelami, których potrzebuję.
Rozumiem! Ale co, jeśli muszę mieć skonfigurowane migracje w mojej aplikacji do kolb przed rozpoczęciem innych kontenerów? W innym skrypcie 'wait-for-flask.sh' wykonuję ' '' aż do psql -h "postgres" -U "postgres" -c "WYBIERZ * Z tego_tablicy; '; do > & 2 echo "Postgres jest niedostępny - spanie" spać 1 zrobione "' " To był jedyny sposób, w jaki udało mi się uruchomić inne pojemniki przed rozpoczęciem migracji w alembiku. Jakiś pomysł, jak mógłbym to przeboleć? –
Ponadto, myślałem, że jak "połączony", "zależy od" nie martwi się o to, czy to się skończyło czy nie, tylko czy to się zaczęło. Na przykład, tylko dba o to, aby kontener PostgreSQL był gotowy, ale nie był gotowy do uruchomienia. Czy to niewłaściwy @waterscar? –
@JosephSong masz rację, że depend_on nie będzie czekać, aż usługa będzie gotowa, więc musisz skrypt, aby to sprawdzić. I musisz umieścić ten skrypt sprawdzający we wszystkich kontenerach aplikacji, które są 'depend_on' w kontenerze PostgreSQL, aby upewnić się, że czeka on na zakończenie migracji. – waterscar