問題
Docker-compose up
だとコンテナは起動して、正常にMysqlが動作する。
VSCodeの Remote containers: Reopen in container
で開くとコンテナは起動しているが、Mysqlが動作していない。
原因と解決策
プロジェクトのrootディレクトリにdocker-compose.yml
が存在する状態で、
Remote containers: Reopen in container
を実行すると、既存のdocker-compose.ymlを読み込む、設定が、.devcontainer/に作成され、Docker-compose upが実行されます。
VSCodeが自動的に作成する、.devcontainer/docker-compose.yml
のcommand:の行が悪影響してMysqlが起動していませんでした。
command: の行をコメントアウトすると解決します。
なにか意味があって、command:の行を生成しているのだろうけど、必要性が全く不明。
version: '3'
services:
# Update this to the name of the service you want to work with in your docker-compose.yml file
db:
# If you want add a non-root user to your Dockerfile, you can use the "remoteUser"
# property in devcontainer.json to cause VS Code its sub-processes (terminals, tasks,
# debugging) to execute as the user. Uncomment the next line if you want the entire
# container to run as this user instead. Note that, on Linux, you may need to
# ensure the UID and GID of the container user you create matches your local user.
# See https://aka.ms/vscode-remote/containers/non-root for details.
#
# user: vscode
# Uncomment if you want to override the service's Dockerfile to one in the .devcontainer
# folder. Note that the path of the Dockerfile and context is relative to the *primary*
# docker-compose.yml file (the first in the devcontainer.json "dockerComposeFile"
# array). The sample below assumes your primary file is in the root of your project.
#
# build:
# context: .
# dockerfile: .devcontainer/Dockerfile
volumes:
# Update this to wherever you want VS Code to mount the folder of your project
- .:/workspace:cached
# Uncomment the next line to use Docker from inside the container. See https://aka.ms/vscode-remote/samples/docker-from-docker-compose for details.
# - /var/run/docker.sock:/var/run/docker.sock
# Uncomment the next four lines if you will use a ptrace-based debugger like C++, Go, and Rust.
# cap_add:
# - SYS_PTRACE
# security_opt:
# - seccomp:unconfined
# Overrides default command so things don't shut down after the process ends.
command: /bin/sh -c "while sleep 1000; do :; done"
ひとりごと
Remote containers使っているほかの人の記事では特に問題になってないのに、なぜ??
解決するのに半日かかりました。
いろいろ調査している過程で、Remote containersの理解が深まりました。