Ruby
docker

docker-api gemで、`.NetworkSettings.Networks`が取れない問題

More than 1 year has passed since last update.

docker-api gemで、.NetworkSettings.Networksが取れない問題

概要

このissue見ていただけると大体解決: https://github.com/swipely/docker-api/issues/466

docker inspectコマンドでとれる情報がなぜかgemを使うと取得できない問題です。

解決方法

::Docker::API_VERSION = '1.21'

をdockerのAPIを叩く前に置くだけです。

解説

原因は単純にgemで対象とするAPIバージョンが古いのが原因です。
わかりづらくしてた原因は、全コンテナの情報を取ると .NetworkSettings.Networks はとれてることですかね。

どうやら、docker APIの仕様かバグかで、新しいdocker engineを使うと/v1.16/containers/jsonでも、APIのバージョン的に存在しないはずの情報が返ってるみたいです。
コンテナ情報で .NetworkSettings.Networks が追加されたのが 1.21 みたいなので、定数で指定されているバージョンを上書きします。

公式でドキュメントが提供されてるAPIが1.18までなのでgemで使ってるAPIのバージョンが古すぎる気がします。
合意取ったりとかがめんどくさいので、プルリク投げたい方はどうぞ。

以下のコードで確認できるかと思います:
bash
ruby -rdocker -e "Docker::API_VERSION = '1.21'; p Docker::Container.get('${DOCKER_CONTAINER_ID}').info['NetworkSettings']['Networks']"