Help us understand the problem. What is going on with this article?

linuxでhost.docker.internalを使う (要docker-compose)

TL;DR

docker-compose.override.yaml に以下を記載

docker-compose.override.yaml
version: "3.5" # docker-compose.yamlのバージョンと合わせる

services:
  app: # host.docker.internalを使用したいサービス名
    extra_hosts:
      - "host.docker.internal:172.101.0.1" # 下のsubnetの指定に合わせる

networks:
  default:
    driver: bridge
    ipam:
      config:
        - subnet: 172.101.0.0/16 # 他のnetworkと被らないように指定

firewall設定

firewallが動いている場合は、上記subnetからのアクセスを許可する必要があるかもしれません。
firewalldのコマンド例を記載しておきます。

sudo firewall-cmd --permanent --zone=trusted --add-source=172.101.0.0/16

host.docker.internal

docker for Mac, docker for Windowsでサポートされている、コンテナからホストのネットワークにアクセスするための特殊なドメイン。
macが開発者の主流になっているので、気軽にプロジェクトで使われ、その度にlinuxユーザーは悩みを抱える。

Support host.docker.internal DNS name to host
Support host.docker.internal in dockerd on Linux
[RFD] add configuration option to add host.docker.internal by default

これらのissueによって最終的にはlinuxでも host.docker.internal が使えるようになる予定ですが、リリースされるまでまだ少し掛かりそうなのでWorkaroundを記載しておきます。
というより、作業内容としては上述の通りなので、解説を書きます。

docker-compose.override.yaml

このファイルはdocker-composeコマンドを実行した時に自動で読まれるので、レポジトリに含めたくない自分専用の設定などを書く際に重宝します。
ただし、-fオプションを使用する際は自動では読まれないので、その際にはこのファイルも一緒に指定する必要があります。

extra_hosts

コンテナの /etc/hosts に内容を追記します。

networks

全てのコンテナは特に設定をしなければdefaultという名前のnetworkに属するので、ここに設定を書けば全てのコンテナに自動で反映されます。
ここで設定しているのは、default networkのサブネットです。普通であればnetworkのサブネットは、既存のnetworkとかぶらないように自動で選ばれますが、今回は固定したいため手動で選び設定します。
ホストは全てのnetworkに属し、そのIPは「サブネットマスクの一番下位のbitを1にしたもの」になるようです。(実際に試してそうっぽいと言うだけでドキュメントにそういう記載を見つけたわけではないので、もしかしたらそうならないケースもあるかもしれません。)
なので、このIPをextra_hostsに指定すればドメインを割り当てられるというわけです。

skobaken
golang/scala 静的型付け言語ならだいたい何でもいいという所まで枯れてきた
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした