Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

docker compose で「Additional property - environment is not allowed」エラーが出る

解決したいこと

docker compose buildを実行した際、下記のエラーが出ました。
解決方法が見つからなく、原因を教えていただけたら助かります。

エラー:
services.app Additional property - environment is not allowed

例)
PHP、Nginx、MySQL3つのイメージのビルドをする時、上記のエラーが出ました。
解決方法を教えて下さい。

出ているエラーメッセージを入力
services.app Additional property - environment is not allowed

記述内容:
version: '3.8'

volumes:
mysql-volume:

services:
app:
build:
context: .
dockerfile: ./docker/php/Dockerfile
- volumes:
- ./src/:/var/www/html
- environment:
- DB_CONNECTION=mysql
- DB_HOST=db
- DB_PORT=3306
- DB_DATABASE={DB_NAME}
- DB_USERNAME={DB_USER}
- DB_PASSWORD={DB_PASSWORD}

web:
build:
context: .
dockerfile: ./docker/nginx/Dockerfile
- ports:
- {WEB_PORT}:80
depends_on:
- app
- volumes:
- ./src/:/var/www/html

db:
build:
context: .
dockerfile: ./docker/mysql/Dockerfile
- ports:
- {DB_PORT}:3306
- environment:
MYSQL_DATABASE: {DB_NAME}
MYSQL_USER: {DB_USER}
MYSQL_PASSWORD: {DB_PASSWORD}
MYSQL_ROOT_PASSWORD: {DB_ROOT_PASSWORD}
TZ: 'Asia/Tokyo'
- volumes:
- mysql-volume:/var/lib/mysql

自分で試したこと
docker-compose.yml内の問題だとはわかりました。
インデントの問題、バージョンの問題、色々トライしましたが解決に至りませんでした。

1

3Answer

ハイフンいらなのにハイフンついてたり色々です。
自分が過去に書いたやつは以下の感じです。参考にどうぞ。

version: "3.7"

networks:
  frontend:
  backend:

volumes:
  pgdata:
  opdata:

x-op-restart-policy: &restart_policy
  restart: unless-stopped
x-op-image: &image
  image: openproject/community:11-arm64
x-op-app: &app
  <<: *image
  <<: *restart_policy
  environment:
    RAILS_CACHE_STORE: "memcache"
    OPENPROJECT_CACHE__MEMCACHE__SERVER: "cache:11211"
    OPENPROJECT_RAILS__RELATIVE__URL__ROOT: "${OPENPROJECT_RAILS__RELATIVE__URL__ROOT:-}"
    DATABASE_URL: "postgres://postgres:p4ssw0rd@db/openproject"
    USE_PUMA: "true"
    # set to true to enable the email receiving feature. See ./docker/cron for more options
    IMAP_ENABLED: "${IMAP_ENABLED:-false}"
  volumes:
    - "./opdata:/var/openproject/assets"

services:
  db:
    image: postgres:10
    <<: *restart_policy
    stop_grace_period: "3s"
    volumes:
      - "./pgdata:/var/lib/postgresql/data"
    environment:
      POSTGRES_PASSWORD: p4ssw0rd
      POSTGRES_DB: openproject
    networks:
      - backend

  cache:
    image: memcached
    <<: *restart_policy
    networks:
      - backend

  proxy:
    <<: *image
    <<: *restart_policy
    command: "./docker/prod/proxy"
    ports:
      - "${PORT:-8080}:80"
    environment:
      APP_HOST: web
      OPENPROJECT_RAILS__RELATIVE__URL__ROOT: "${OPENPROJECT_RAILS__RELATIVE__URL__ROOT:-}"
    depends_on:
      - web
    networks:
      - frontend

  web:
    <<: *app
    command: "./docker/prod/web"
    networks:
      - frontend
      - backend
    depends_on:
      - db
      - cache
      - seeder

  worker:
    <<: *app
    command: "./docker/prod/worker"
    networks:
      - backend
    depends_on:
      - db
      - cache
      - seeder

  cron:
    <<: *app
    command: "./docker/prod/cron"
    networks:
      - backend
    depends_on:
      - db
      - cache
      - seeder

  seeder:
    <<: *app
    command: "./docker/prod/seeder"
    restart: on-failure
    networks:
      - backend
0Like

docker-compose.yml の正しい書き方はまず公式のリファレンスを読んでください。 https://docs.docker.jp/compose/compose-file/compose-file-v3.html

environmentvolumesports の前にハイフンは不要です。また、全角ハイフンになっているのは元からでしょうか。そうなら(必要な場所で使うときは)半角ハイフンにしてください。質問に貼るために変換したのであれば、そうするのではなくコードブロック記法を使って元のまま貼り付けてください。

0Like

下記の記述で解決することができました。

version: '3.8'

volumes:
mysql-volume:

services:
app:
build:
context: .
dockerfile: ./docker/php/Dockerfile
volumes:
- ./src/:/var/www/html
environment:
- DB_CONNECTION=mysql
- DB_HOST=db
- DB_PORT=3306
- DB_DATABASE=${DB_NAME}
- DB_USERNAME=${DB_USER}
- DB_PASSWORD=${DB_PASSWORD}

web:
build:
context: .
dockerfile: ./docker/nginx/Dockerfile
ports:
- ${WEB_PORT}:80
depends_on:
- app
volumes:
- ./src/:/var/www/html

db:
build:
context: .
dockerfile: ./docker/mysql/Dockerfile
ports:
- ${DB_PORT}:3306
environment:
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
TZ: 'Asia/Tokyo'
volumes:
- mysql-volume:/var/lib/mysql

0Like

Your answer might help someone💌