Nate
Nate

Reputation: 13242

docker-compose No such command: convert error

I'm trying to follow this tutorial on AWS ECS integration that mentions the Docker command docker compose convert that is supposed to generate a AWS CloudFormation template.

However, when I run this command, it doesn't appear to exist.

$ docker-compose convert
No such command: convert
#...

$ docker compose convert
docker: 'compose' is not a docker command.
See 'docker --help'

$ docker context create ecs myecscontext
"docker context create" requires exactly 1 argument.
See 'docker context create --help'.

Usage:  docker context create [OPTIONS] CONTEXT

Create a context

$ docker --version
Docker version 19.03.13, build 4484c46

$ docker-compose --version
docker-compose version 1.25.5, build unknown

$ docker version
Client:
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.8
 Git commit:        4484c46
 Built:             Thu Oct 15 18:34:11 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          19.03.11
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.12
  Git commit:       77e06fd
  Built:            Mon Jun  8 20:24:59 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

$ docker info
Client:
 Debug Mode: false

Server:
 Containers: 12
  Running: 3
  Paused: 0
  Stopped: 9
 Images: 149
 Server Version: 19.03.11
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 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: runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc version: 
 init version: fec3683
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 5.8.0-29-generic
 Operating System: Ubuntu Core 16
 OSType: linux
 Architecture: x86_64
 CPUs: 16
 Total Memory: 7.202GiB
 Name: HongLee
 ID: GZ5R:KQDD:JHOJ:KCUF:73AE:N3NY:MWXS:ABQ2:2EVY:4ABJ:H375:J64V
 Docker Root Dir: /var/snap/docker/common/var-lib-docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

Any ideas?

Upvotes: 1

Views: 2762

Answers (2)

jamshid
jamshid

Reputation: 1775

You're running on Ubuntu. The /usr/bin/docker installed (even with latest docker-ce 20.10.6) does not enable the docker compose subcommand. It is enabled by default on Docker for Desktop Windows or Mac.

See the Linux installation instructions at https://github.com/docker/compose-cli to download and configure so that docker compose works.

There's a curl|bash script for Ubuntu or just download the latest release, put that docker executable into a PATH directory before /usr/bin/ and make sure the original docker is available as com.docker.cli e.g. ln -s /usr/bin/docker ~/bin/com.docker.cli.

Upvotes: 2

Jeffrey Mixon
Jeffrey Mixon

Reputation: 13616

To get the ECS integration, you need to be using an ECS docker context. First, enable the experimental flag in /etc/docker/daemon.json

// /etc/docker/daemon.json
{
    "experimental": true
}

Then create the context:

docker context create ecs myecscontext
docker context use myecscontext
$ docker context ls
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT                                       ORCHESTRATOR
default             moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock   [redacted] (default)   swarm
myecscontext *      ecs                                                                                                                                                   

Now run convert:

$ docker compose convert
WARN[0000] services.build: unsupported attribute        
AWSTemplateFormatVersion: 2010-09-09
Resources:
  AdminwebService:
    DependsOn:
    - AdminwebTCP80Listener
    Properties:
      Cluster:
...

Upvotes: 3

Related Questions