🎃

docker-compose.yml が 正しく書けているか知りたいときの convertコマンド。

2022/08/06に公開

エイリアスだったり、.env読み込みだったり。
docker-compose.ymlで色々やろうとすると、正しく書けているか気になりますよね。

そんなときに便利なのが convert コマンド。
もう簡単にoutputしてくれるだけなんですが、幸せです。

例えば、こんなの書きました

version: "3.9"

x-TZ:
  &TZ
  TZ: 'Asia/Tokyo'

services:
  next:
    build:
      context: ../..
      dockerfile: docker/development/Dockerfile
    volumes:
      - ../..:/app
    working_dir: /app
    environment:
      CHOKIDAR_USEPOLLING: true
      <<: *TZ

  postgres:
    image: postgres:14-alpine
    environment:
      POSTGRES_USER: ${DB_NAME}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: ${DB_NAME}
      <<: *TZ
    ports:
      - 5432:5432
    volumes:
      - ./postgres/data:/var/lib/postgresql/data

例によってエイリアスとenv読み込みをやっています。あんまり便利に使えてません。
感じますよね。ああ不安、.envファイル読めているの?エイリアスは正しく書けてる?

convert使うだけです。ちょっとsyntax変わっちゃいますよ。

docker compose -f docker/development/docker-compose.yml convert
WARN[0000] The "DB_PASSWORD" variable is not set. Defaulting to a blank string. 
name: development
services:
  next:
    build:
      context: /root
      dockerfile: docker/development/Dockerfile
    environment:
      CHOKIDAR_USEPOLLING: "true"
      TZ: Asia/Tokyo
    networks:
      default: null
    volumes:
    - type: bind
      source: /root/
      target: /app
      bind:
        create_host_path: true
    working_dir: /app
  postgres:
    environment:
      POSTGRES_DB: postgres
      POSTGRES_PASSWORD: ""
      POSTGRES_USER: postgres
      TZ: Asia/Tokyo
    image: postgres:14-alpine
    networks:
      default: null
    ports:
    - mode: ingress
      target: 5432
      published: "5432"
      protocol: tcp
    volumes:
    - type: bind
      source: /root/docker/development/postgres/data
      target: /var/lib/postgresql/data
      bind:
        create_host_path: true
networks:
  default:
    name: development_default
x-TZ:
  TZ: Asia/Tokyo

あ、.env読めてるけど、POSTGRES_PASSWORDが定義できてないわ。

Discussion