Ошибка преобразования команд Docker в docker-compose.yml
При попытке перевести следующие 2 команды докера в docker-compose.yml
используя Compose версии 3
docker run \
--name timescaledb \
--network timescaledb-net \
-e POSTGRES_PASSWORD=insecure \
-e POSTGRES_INITDB_WALDIR=/var/lib/postgresql/data/pg_wal \
-e PGDATA=/var/lib/postgresql/data/pg_data \
timescale/timescaledb:latest-pg11 postgres \
-cwal_level=archive \
-carchive_mode=on \
-carchive_command="/usr/bin/wget wale/wal-push/%f -O -" \
-carchive_timeout=600 \
-ccheckpoint_timeout=700 \
-cmax_wal_senders=1
а также
docker run \
--name wale \
--network timescaledb-net \
--volumes-from timescaledb \
-v ./backups:/backups \
-e WALE_LOG_DESTINATION=stderr \
-e PGWAL=/var/lib/postgresql/data/pg_wal \
-e PGDATA=/var/lib/postgresql/data/pg_data \
-e PGHOST=timescaledb \
-e PGPASSWORD=insecure \
-e PGUSER=postgres \
-e WALE_FILE_PREFIX=file://localhost/backups \
timescale/timescaledb-wale:latest
мы получаем следующую ошибку при запуске docker-compose up
:
ОШИБКА: файл Compose './docker-compose.yml' недействителен, потому что: Неподдерживаемый параметр конфигурации для services.wale: 'volume_from'
Как мы можем правильно перевести 2 команды Docker для использования Compose версии 3? Нам нужно будет указать расположение томов на хосте (т.е../timescaledb
).
Использование Mac OS X 10.15.3, Docker 19.03.8, Docker Compose 1.25.4
docker-compose.yml
version: '3.3'
services:
timescaledb:
image: timescale/timescaledb:latest-pg11
container_name: timescaledb
ports:
- 5432:5432
environment:
- POSTGRES_PASSWORD=insecure
- POSTGRES_INITDB_WALDIR=/var/lib/postgresql/data/pg_wal
- PGDATA=/var/lib/postgresql/data/pg_data
command: -cwal_level=archive -carchive_mode=on -carchive_command="/usr/bin/wget wale/wal-push/%f -O -" -carchive_timeout=600 -ccheckpoint_timeout=700 -cmax_wal_senders=1
volumes:
- ./timescaledb:/var/lib/postgresql/data
networks:
- timescaledb-net
wale:
image: timescale/timescaledb-wale:latest
container_name: wale
environment:
- WALE_LOG_DESTINATION=stderr
- PGWAL=/var/lib/postgresql/data/pg_wal
- PGDATA=/var/lib/postgresql/data/pg_data
- PGHOST=timescaledb
- PGPASSWORD=insecure
- PGUSER=postgres
- WALE_FILE_PREFIX=file://localhost/backups
volumes_from:
- tsdb
volumes:
- ./backups:/backups
networks:
- timescaledb-net
depends_on:
- timescaledb
networks:
timescaledb-net:
1 ответ
В контейнере timescaledb
вы на самом деле монтируете /var/lib/postgresql/data
к ./timescaledb
и, следовательно, если вы хотите использовать тот же объем для wale
контейнер, вы можете редактировать wale
контейнер вроде:
...
volumes:
- ./backups:/backups
- ./timescaledb:/var/lib/postgresql/data
...
В этом случае оба контейнера смогут читать и писать с одного и того же смонтированного тома на ваш локальный компьютер.
Также не забудьте удалить эту часть, так как это недопустимая команда в docker-compose:
volumes_from:
- tsdb