Ошибка преобразования команд 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
Другие вопросы по тегам