Closed4

Dev Container configuration '.devcontainer/devcontainer.json' file already exists. が発生する

光岡 高宏光岡 高宏

事象

VSCode で Dev Container を利用しようと、Dev Container: Reopen in Containerを実行した際に下記のエラーメッセージが発生した。

Dev Container configuration '.devcontainer/devcontainer.json' file already exists.

環境

  • Apple M1 (M1 Mac)
  • macOS Ventura 13.4.1(22F82)
  • VSCode 1.85.1
光岡 高宏光岡 高宏

Dev Container 関連のファイル

.devcontainer
├── devcontainer.json
├── docker-compose.yml
└── flutter
    └── Dockerfile
.devcontainer/devcontainer.json
{
  "name": "dev container",
  "dockerComposeFile": "docker-compose.yml"
}
.devcontainer/docker-compose.yml
version: '3.8'
services:
  devcontainer:
    build:
      context: .
      dockerfile: flutter/Dockerfile
    volumes:
      - ../..:/workspaces:cached
    command: sleep infinity
    env_file:
      - flutter/.flutter.env
.devcontainer/Dockerfile
# 1: Base image
FROM dart:2.17-sdk

# Maintainer
LABEL maintainer="XXX <xxx@example.com>"

# Workdir
WORKDIR /workspace/xxx

# 2: Install Flutter
ARG PATH=/root/.pub-cache/bin:$PATH
ARG FLUTTER_VERSION=3.0.1
RUN dart pub global activate melos --verbose && \
    dart pub global activate fvm --verbose && \
    fvm doctor --verbose && \
    fvm install $FLUTTER_VERSION --verbose && \
    fvm use --force $FLUTTER_VERSION --verbose && \
    fvm flutter config --enable-web --enable-linux-desktop --enable-macos-desktop --enable-windows-desktop --enable-android --enable-ios --enable-fuchsia && \
    # fvm flutter precache --verbose && \
    fvm flutter doctor --verbose

# Set paths
ENV FVM_ROOT=/root/.pub-cache
ENV PATH $FVM_ROOT/bin:$PATH
光岡 高宏光岡 高宏

原因

devcontainer.jsonのプロパティが足りない

対応

docker-compose.ymlを利用する場合はdevcontainer.jsonに下記プロパティを足す

  • service
  • workspaceFolder
.devcontainer/devcontainer.json
{
  "name": "dev container",
  "dockerComposeFile": "docker-compose.yml",
  "service": "devcontainer",
  "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}"
}

serviceにはdocker-compose.ymlで指定したサービス名をつけること

光岡 高宏光岡 高宏

再び、Dev Container: Reopen in Containerを実行すると、無事コンテナが起動した :)

このスクラップは3ヶ月前にクローズされました