docker / compose

Define and run multi-container applications with Docker
https://docs.docker.com/compose/
Apache License 2.0
33.61k stars 5.19k forks source link

[BUG] Parsing error: Top-level object must be a mapping #10888

Open akerouanton opened 1 year ago

akerouanton commented 1 year ago

Description

I wrote a Compose file yesterday, and hit that strange error the first time I tried to docker compose up -d:

$ docker compose up -d
parsing <path>/docker-compose.yml: Top-level object must be a mapping

Since then, whenever I retry I get the right error message:

$ docker compose up -d
validating <path>/docker-compose.yml: services.foobar Additional property cmd is not allowed

I tried to create a new Compose file by retyping the exact same thing but I can't reproduce this issue.

This has already been reported in #10769.

Steps To Reproduce

Here's my Compose file:

services:
  foobar:
    image: busybox:latest
    cmd: ["sleep", "infinity"]
    networks:
      testnet:
        ipv4_address: 192.168.200.23
      front-tier:
        ipv4_address: 172.23.0.10

networks:
  testnet:
    name: testnet
    external: true
  front-tier:
    ipam:
      config:
        - subnet: 172.23.0.0/24

Compose Version

$ docker compose version
Docker Compose version v2.20.2-desktop.1

Docker Environment

docker info ```Text $ docker info Client: Version: 24.0.2 Context: default Debug Mode: false Plugins: buildx: Docker Buildx (Docker Inc.) Version: v0.11.2-desktop.1 Path: /home/akerouanton/.docker/cli-plugins/docker-buildx compose: Docker Compose (Docker Inc.) Version: v2.20.2-desktop.1 Path: /usr/lib/docker/cli-plugins/docker-compose dev: Docker Dev Environments (Docker Inc.) Version: v0.1.0 Path: /usr/lib/docker/cli-plugins/docker-dev extension: Manages Docker extensions (Docker Inc.) Version: v0.2.20 Path: /usr/lib/docker/cli-plugins/docker-extension init: Creates Docker-related starter files for your project (Docker Inc.) Version: v0.1.0-beta.6 Path: /usr/lib/docker/cli-plugins/docker-init sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc.) Version: 0.6.0 Path: /usr/lib/docker/cli-plugins/docker-sbom scan: Docker Scan (Docker Inc.) Version: v0.26.0 Path: /usr/lib/docker/cli-plugins/docker-scan scout: Command line tool for Docker Scout (Docker Inc.) Version: 0.20.0 Path: /usr/lib/docker/cli-plugins/docker-scout Server: Containers: 2 Running: 2 Paused: 0 Stopped: 0 Images: 8 Server Version: dev Storage Driver: vfs Logging Driver: json-file Cgroup Driver: cgroupfs Cgroup Version: 2 Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: crun io.containerd.runc.v2 runc Default Runtime: runc Init Binary: docker-init containerd version: 1677a17964311325ed1c31e2c0a3589ce6d5c30d runc version: v1.1.8-0-g82f18fe init version: de40ad0 Security Options: seccomp Profile: builtin cgroupns Kernel Version: 6.4.3-arch1-2 Operating System: Debian GNU/Linux 11 (bullseye) (containerized) OSType: linux Architecture: x86_64 CPUs: 16 Total Memory: 31.05GiB Name: 21edbd5e13d9 ID: 2af748a0-6e60-4b57-aa88-f1c61e3b5c55 Docker Root Dir: /var/lib/docker Debug Mode: true File Descriptors: 40 Goroutines: 56 System Time: 2023-08-10T08:32:48.723676293Z EventsListeners: 0 Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false WARNING: API is accessible on http://0.0.0.0:2375 without encryption. Access to the remote API is equivalent to root access on the host. Refer to the 'Docker daemon attack surface' section in the documentation for more information: https://docs.docker.com/go/attack-surface/ ```

Anything else?

No response

milas commented 1 year ago

For this error:

Additional property cmd is not allowed

The field is named command, change to command: ['sleep', 'infinity'] and it should work.


For this error:

Top-level object must be a mapping

Hmm...if this happens again, could you send the raw Compose file? I'll see if we can make this error more descriptive as well.

akerouanton commented 1 year ago

Hmm...if this happens again, could you send the raw Compose file? I'll see if we can make this error more descriptive as well.

Actually what I provided is the raw Compose file that triggered the issue. Unless you mean something like an xxd output to check BOM or other stuff that wouldn't appear in a text editor?

milas commented 1 year ago

Unless you mean something like an xxd output to check BOM or other stuff that wouldn't appear in a text editor?

Yeah, that's what I was wondering, but I looked at it a bit more and that error is not coming from the YAML library but the compose-go loader directly when we're doing some type assertions, so it somehow got unmarshaled as a type it didn't expect 🤔

github-actions[bot] commented 1 week ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.