LoginSignup
1
2

[Linux / docker] docker containerから、localhostへアクセスしたいときのHack

Last updated at Posted at 2023-11-27

概要

dockerコンテナ内からlocalhostにアクセスしようとすると、アクセス先はコンテナ内になってしまいますよね。
でも、コンテナの外にあるホストOS上に他のサービスが立ち上がっていて、そのサービスにアクセスしたい場合って、きっとありますよね?(*´﹃`*)

(いつか図を書こう)

そんなときの対策。

結論

次のコマンドで、HOST_IP_ADDRESSという環境変数にlocalhostのIPアドレスを設定できました。

$ export HOST_IP_ADDRESS=`ip -4 a show ens5 | grep inet | grep -v inet6 | sed -E "s/inet ([0-9]{1,3}.[0-9]{1,3}.[0-9].{1,3}.[0-9]{1,3}).*$/\1/" | tr -d "\t"`

ens5は、AWS EC2上においてlocalhostのIPアドレスを指す名前でした。
 環境によってこの名前は異なるので、自身で$ ip aコマンドを打ってみて、どんな名前のブロックにlocalhostのIPアドレスがあるかを事前に確認してみましょう(^ワ^*)

 たとえば、私のwsl2で実行してみたところ、ens5ではなくeth0でした。

このコマンドはどうやって生まれたか

1. 最初 (ifconfigコマンドを利用)

最初はこの記事に書かれている方法でlocalhostのIPアドレス抽出を行っていました。

次のような感じです。

$ ifconfig en0 | grep inet | grep -v inet6 | sed -E "s/inet ([0-9]{1,3}.[0-9]{1,3}.[0-9].{1,3}.[0-9]{1,3}) .*$/\1/" | tr -d "\t"`
    172.000.000.255

2. 最終系 (ipコマンドを利用)

しかし、ifconfigコマンドは非推奨という次のような記事を見かけたので、

今度は、次の記事に書かれていた$ ip -4 a show ens4というコマンドを流用させていただきました。

スペースをちょっと書き換えて次のように修正したら、期待通りの動きになりました。

$ ip -4 a show ens5 | grep inet | grep -v inet6 | sed -E "s/inet ([0-9]{1,3}.[0-9]{1,3}.[0-9].{1,3}.[0-9]{1,3}).*$/\1/" | tr -d "\t"
    172.000.000.255

(正規表現あんまりわかってないので、偶然の産物です)

感想

元の記事からほんのちょっとしか書き換えてないけど、とはいえ、これだけのために結構時間を食ったので、記事にしておくことにしました(。ŏ﹏ŏ)

1
2
0

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
1
2