LoginSignup
16
22

More than 3 years have passed since last update.

[Docker / VSCode] VSCodeからリモートマシンのDocker情報にアクセスする

Last updated at Posted at 2020-04-19

概要

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でリモート環境にアクセスした状態でインストールしましょう。
するとこうなります。
image.png
この記事を一度作成し終わった後、別の環境で間違ってローカルにインストールしたところ、動きませんでした。注意>_<

  • やってみた結果
    めちゃ Failed to connect ...
    image.png
    Failed to connect. Is Docker installed and running? と表示されるorz
  • この結果に対する公式サイトの説明
    microsoft / vscode-docker (Troubleshooting)
    1. docker インストールしてる?
      (↑の注意も参照。ローカルじゃなくて、リモートにインストールしないとダメだよ。)
    2. インストールしても直らなかったら VSCodeの バグだよ
      そんなばなな....
      どうしたらいいの....>_<。

メイン作業

よく見たら、githubのREADMEに、Linuxの場合にすべきことが書いてあった
image.png

というわけでこのあたりを実施しよう!

/etc/docker/daemon.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])

ムキィィイー

対策

↓の2つのうちどちらかを使おう(どちらも同じことを言っているよ)

採用した対策

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
/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を再起動すると...

image.png

ふぅ~リモートマシンにアクセスできたみたい( ^^) _旦~~

その他

感想

記事をもう少し整理した方がいいかもしれないと思っています。
あせって失敗してしまったことも書いているので、スムーズに作業する人にとっては不要な情報が混じっているかも(´・・`)

次はこの記事(VS Code Remote Development で Docker 開発環境を利用する)を見て、Dockerコンテナ内のフォルダを VSCode で開けるようにするぞ ( *˙︶˙*)وグッ!

16
22
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
22