Ошибка преобразования Docker команд в docker -compose.yml - PullRequest
0 голосов
/ 27 марта 2020

При попытке преобразовать следующие 2 docker команды в 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).

Использование Ma c OS X 10.15.3, Docker 19.03.8, Docker Композит 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 Ответ

2 голосов
/ 27 марта 2020

В контейнере timescaledb вы фактически монтируете /var/lib/postgresql/data в ./timescaledb и, следовательно, если вы хотите использовать тот же объем для контейнера wale, вы можете отредактировать контейнер wale следующим образом:

...
    volumes:
      - ./backups:/backups
      - ./timescaledb:/var/lib/postgresql/data
...

В этом случае оба контейнера смогут читать и записывать данные с одного подключенного тома на локальный компьютер.

Кроме того, не забудьте удалить эту часть, так как она не является допустимая команда в docker -compose:

    volumes_from:
      - tsdb
...