概要
VSCodeの拡張に Docker なるものがあるらしいので、これを使ってみようとして試行錯誤した記事です。
前提
- ローカルマシンにVSCode、リモートマシンにdockerがインストールされている
- ローカルマシン内VSCodeの RemoteDevelopment 経由で、リモートマシンにアクセスできている
Environment
versionなど | |
---|---|
ローカルOS | Windows10 |
リモートOS | CentOS Linux release 7.5.1804 (Core) |
docker | Docker version 18.09.0, build 4d60db4 |
VSCode | 1.44.2 |
やり方
はじめの1歩
VSCode の Extension - Docker
- のインストール方法はここに書いてある
Working with containers
※注意(2020/04/22追記)
VSCodeのExtension 'docker' をインストールするときは、VSCodeでリモート環境にアクセスした状態でインストールしましょう。
するとこうなります。
この記事を一度作成し終わった後、別の環境で間違ってローカルにインストールしたところ、動きませんでした。注意>_<
- やってみた結果
めちゃ Failed to connect ...
Failed to connect. Is Docker installed and running?
と表示されるorz - この結果に対する公式サイトの説明
microsoft / vscode-docker (Troubleshooting)- docker インストールしてる?
(↑の注意も参照。ローカルじゃなくて、リモートにインストールしないとダメだよ。) - インストールしても直らなかったら VSCodeの バグだよ
そんなばなな....
どうしたらいいの....>_<。
- docker インストールしてる?
メイン作業
よく見たら、githubのREADMEに、Linuxの場合にすべきことが書いてあった
というわけでこのあたりを実施しよう!
- [dockerを、sudoなしで実行できるようにする] (https://docs.docker.com/engine/install/linux-postinstall/#configuring-remote-access-with-daemonjson#manage-docker-as-a-non-root-user)
簡単なので略 -
Configuring remote access with daemon.json
jsonファイルを作成
{
"hosts": [
"unix:///var/run/docker.sock",
"tcp://127.0.0.1:2375"
]
}
/etc/docker/daemon.json 作ったら restart 失敗
# 以下のエラーが出たとき
$ sudo systemctl restart docker
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
# 言われた通りに journal ログを見てみましょう
$ sudo journalctl -xe
-- Unit docker.service has begun starting up.
4月 19 14:43:56 localhost.localdomain dockerd[14581]: unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives are specified both as a flag and in the configuration file: hosts: (from flag: [unix://], from file: [unix:///var/run/docker.sock tcp://127.0.0.1:2375])
ムキィィイー
- 参考
Update daemon.json,start failed
この人たちも困っていたみたい(´・ω・`)
対策
↓の2つのうちどちらかを使おう(どちらも同じことを言っているよ)
- Unable to start docker after configuring hosts in daemon.json
- Cannot load hosts in configuration json file when starting docker daemon
採用した対策
1. /etc/systemd/system/docker.service.d/override.conf` を作成
$ sudo mkdir /etc/systemd/system/docker.service.d
$ sudo touch /etc/systemd/system/docker.service.d/override.conf
$ sudo vim /etc/systemd/system/docker.service.d/override.conf
# Disable flags to dockerd, all settings are done in /etc/docker/daemon.json
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
2. dockerデーモンの再起動
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
# 結果を確認
$ sudo netstat -lntp | grep dockerd
tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 15781/dockerd
3. sockファイルの権限変更
ここまでやると、docker コマンドが再び sudo 権限でしか行えなくなっていることがある
これに対しては、 sock ファイルの権限を書き換えたら上手くいった
# 権限がないらしい...
$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/json: dial unix /var/run/docker.sock: connect: permission denied
# だったらこうだ!
$ sudo chmod 666 /var/run/docker.sock
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# もう一回確認
$ sudo netstat -lntp | grep dockerd
tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 17279/dockerd
できた!!(((o(*゚▽゚*)o)))
そして、VSCodeを再起動すると...
ふぅ~リモートマシンにアクセスできたみたい( ^^) _旦~~
- [参考] sockファイルの書き換えを提案していた記事
How to fix docker: Got permission denied while trying to connect to the Docker daemon socket
その他
- pythonのdocker環境の場合のお話
https://code.visualstudio.com/docs/containers/quickstart-python
感想
記事をもう少し整理した方がいいかもしれないと思っています。
あせって失敗してしまったことも書いているので、スムーズに作業する人にとっては不要な情報が混じっているかも(´・・`)
次はこの記事(VS Code Remote Development で Docker 開発環境を利用する)を見て、Dockerコンテナ内のフォルダを VSCode で開けるようにするぞ ( *˙︶˙*)وグッ!