状況
VSCodeのRemote-containers
を使用してコンテナを起動させようとしたところ以下のとおり起動させることができませんでした。
Remote-containers
のログを確認するとdocker-compose
コマンドを実行した際にエラーとなっているようでした。
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
において読み込ませることができませんでした。
COMPOSE_VER = 3.9
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
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」をクリックします。
$ 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
も正常に起動しました。