将Docker命令转换为docker-compose.yml

时间:2020-03-27 04:07:30

标签: postgresql docker docker-compose timescaledb wal-e

在尝试使用Compose版本3将以下2个docker命令转换为docker-compose.yml

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时遇到以下错误:

错误:撰写文件'./docker-compose.yml'无效,因为: services.wale的不受支持的配置选项:'volumes_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 个答案:

答案 0 :(得分:3)

您实际上是在timescaledb容器中将/var/lib/postgresql/data装载到./timescaledb,因此,如果您想对wale容器使用相同的卷,则可以进行编辑wale容器,例如:

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

在这种情况下,两个容器都将能够从相同的已安装卷读取和写入本地计算机。

此外,请记住删除此部分,因为它在docker-compose中不是有效命令:

    volumes_from:
      - tsdb