【Docker】docker-compose コマンドが正常に動作しない時の対処法

## 状況
VSCodeの`Remote-containers`を使用してコンテナを起動させようとしたところ以下のとおり起動させることができませんでした。

![スクリーンショット 2022-07-07 午前4.36.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/6f232154-33f0-b06b-60c1-54568f420a66.png)

`Remote-containers`のログを確認すると`docker-compose`コマンドを実行した際にエラーとなっているようでした。

```:Remote-containersのログ（抜粋）

Error: Command failed: docker-compose --project-name container-test 
-f /Users/username/Documents/sources/container-test/docker-compose.yml 
-f /Users/username/Documents/sources/container-test/.devcontainer/docker-compose.vscode.yml 
-f /Users/username/Library/Application Support/Code/User/globalStorage/ms-vscode-remote.remote-containers/data/docker-compose/docker-compose.devcontainer.containerFeatures-1657136147183.yml up -d

```

そのため、試しにローカルのターミナルで`docker-compose`コマンドを実行しました。
すると以下のようなログが出力され、エラーとなりました。

```:ターミナル
$ docker-compose run --no-deps api rails new . --force --database=mysql
Creating network "container-test_default" with the default driver
Building api
Step 1/16 : FROM ruby:3.1.2
3.1.2: Pulling from library/ruby
f873dfbc59b1: Pull complete
bc7b65e0e9cd: Pull complete
b43836e7983c: Pull complete
b1209d2973c2: Pull complete
8edd6fb86802: Pull complete
bfbd36c23a25: Pull complete
ef92a5e6a312: Pull complete
7af482bcab35: Pull complete
Digest: sha256:0dfd71068ecada2071deb5019d4fea3aba31eb0fae676c62de7f9e0cbeb40012
Status: Downloaded newer image for ruby:3.1.2
 ---> 22900076d18b
Step 2/16 : ARG APP_NAME=myapp-backend
 ---> Running in c516bfd0def2
Removing intermediate container c516bfd0def2
 ---> 06b52f7af188
Step 3/16 : ARG USER_NAME=ruby
 ---> Running in 3146df19fa4f
Removing intermediate container 3146df19fa4f
 ---> 7dceff73559f
Step 4/16 : ENV RUBYGEMS_VERSION=3.3.17
 ---> Running in c07d2a2a1fe9
Removing intermediate container c07d2a2a1fe9
 ---> 623388037839
Step 5/16 : ENV TZ=Asia/Tokyo
 ---> Running in 36e399b3cc96
Removing intermediate container 36e399b3cc96
 ---> c89529691d54
Step 6/16 : WORKDIR /${APP_NAME}
 ---> Running in 6edd7a4f5c5a
Removing intermediate container 6edd7a4f5c5a
 ---> 65bdeabc83f5
Step 7/16 : COPY Gemfile Gemfile.lock /${APP_NAME}
ERROR: Service 'api' failed to build : When using COPY with more than one source file, the destination must be a directory and end with a /

```
また`.env`に記述した環境変数も`docker-compose.yml`において読み込ませることができませんでした。
```.env
COMPOSE_VER = 3.9
```

```docker-compose.yml
version: '${COMPOSE_VER}'
  # <以下略>
```
```:ターミナル
$ docker-compose run api rails new . --force --database=mysql
ERROR: Version "${COMPOSE_VER}" in "./docker-compose.yml" is invalid.
```

コマンドを`docker compose`に変更すると正常に動作しました。
```:ターミナル
$ docker compose run --no-deps api rails new . --force --database=mysql
[+] Building 15.3s (13/13) FINISHED
 => [internal] load build definition from Dockerfile                                                                         0.0s
 => => transferring dockerfile: 215B                                                                                         0.0s
 => [internal] load .dockerignore                                                                                            0.0s
 => => transferring context: 2B                                                                                              0.0s
 => [internal] load metadata for docker.io/library/ruby:3.1.2                                                                0.0s
 => [1/8] FROM docker.io/library/ruby:3.1.2                                                                                  0.0s
 => [internal] load build context                                                                                            0.0s
 => => transferring context: 622B                                                                                            0.0s
 => CACHED [2/8] WORKDIR /myapp-backend                                                                                      0.0s
 => CACHED [3/8] COPY Gemfile Gemfile.lock /myapp-backend                                                                    0.0s
 => [4/8] RUN gem update --system 3.3.17 &&     bundle install                                                              10.8s
 => [5/8] RUN mkdir -p ./tmp/sockets                                                                                         0.2s
 => [6/8] COPY /docker/api/entrypoint.sh /usr/bin/                                                                           0.0s
 => [7/8] RUN chmod +x /usr/bin/entrypoint.sh                                                                                0.2s
 => [8/8] RUN adduser ruby &&     chown -R ruby /myapp-backend &&     chown -R ruby /usr/local/bundle                        3.6s
 => exporting to image                                                                                                       0.5s
 => => exporting layers                                                                                                      0.5s
 => => writing image sha256:edb1cbd114fbc8c95c52fabd02c9702d07740833f5231ff1f43b6fb40d0ed930                                 0.0s
 => => naming to docker.io/library/container-test_api
```



バージョンは以下のとおりでした。
![スクリーンショット 2022-07-07 午前4.25.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/2ce34190-db6f-049d-084d-d486d37c23b6.png)

`docker-compose version`の実行結果は以下のとおりです。
```:ターミナル
$ docker-compose version
docker-compose version 1.29.2, build 5becea4c
docker-py version: 5.0.0
CPython version: 3.9.0
OpenSSL version: OpenSSL 1.1.1h  22 Sep 2020
```



## 対処法
Docker Compose V2に変更することで正常に動作するようになりました。
具体的には以下のとおりです。

```:ターミナル
$ docker-compose enable-v2
```
上記のコマンドを実行することでdocker-composeのバージョンが変わります。
または以下の画面から変更することもできます。
「Use Docker Compose V2」にチェックをつけ、「Apply & Restart」をクリックします。

![スクリーンショット 2022-07-07 午前6.15.00のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/c7e1e923-877c-0d37-4965-5151f69607fb.png)

![スクリーンショット 2022-07-07 午前5.40.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/e263fde8-5c2b-3d2a-b66f-931115f9120a.png)
```:ターミナル
$ docker-compose version
Docker Compose version v2.6.1
```
変更後に再度`docker-compose run --no-deps api rails new . --force --database=mysql`を実行すると正常に動作しました。

```:ターミナル
$ docker-compose run --no-deps api rails new . --force --database=mysql
[+] Building 15.3s (13/13) FINISHED
 => [internal] load build definition from Dockerfile                                                                         0.0s
 => => transferring dockerfile: 215B                                                                                         0.0s
 => [internal] load .dockerignore                                                                                            0.0s
 => => transferring context: 2B                                                                                              0.0s
 => [internal] load metadata for docker.io/library/ruby:3.1.2                                                                0.0s
 => [1/8] FROM docker.io/library/ruby:3.1.2                                                                                  0.0s
 => [internal] load build context                                                                                            0.0s
 => => transferring context: 622B                                                                                            0.0s
 => CACHED [2/8] WORKDIR /myapp-backend                                                                                      0.0s
 => CACHED [3/8] COPY Gemfile Gemfile.lock /myapp-backend                                                                    0.0s
 => [4/8] RUN gem update --system 3.3.17 &&     bundle install                                                              10.8s
 => [5/8] RUN mkdir -p ./tmp/sockets                                                                                         0.2s
 => [6/8] COPY /docker/api/entrypoint.sh /usr/bin/                                                                           0.0s
 => [7/8] RUN chmod +x /usr/bin/entrypoint.sh                                                                                0.2s
 => [8/8] RUN adduser ruby &&     chown -R ruby /myapp-backend &&     chown -R ruby /usr/local/bundle                        3.6s
 => exporting to image                                                                                                       0.5s
 => => exporting layers                                                                                                      0.5s
 => => writing image sha256:edb1cbd114fbc8c95c52fabd02c9702d07740833f5231ff1f43b6fb40d0ed930                                 0.0s
 => => naming to docker.io/library/container-test_api
```
また`Remote-containers`も正常に起動しました。

![スクリーンショット 2022-07-07 午前5.45.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/9ebf626a-67d3-3aae-47d9-b60606fd70f6.png)