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']"