web-dev-qa-db-ja.com

docker-composeを使用し、docker bridgeを使用せずにdockerコンテナーからlocalhost:9092に接続する方法

私はKafkaサーバー上のローカルマシンポート9092で実行しています。docker-composeを使用するDockerコンテナでサービスを実行していますkafkaサーバーにメッセージを送信します。

'localhost'とIPを使用してサービスコードでプロデューサーを記述しようとしましたが、どちらも機能しません。

誰かが問題を解決するのを手伝ってくれる?

11
Manish Kumar

docker-composeを使用:

Network_modeオプションを使用して、localhostポートへの接続を許可します

network_mode: "Host"

docker-composeなし:

--netフラグを使用して、localhostポートへの接続を許可します

docker run -it --net=Host

--networkフラグも使用できます

--network="Host"

Dockerの公式ドキュメントによると、これらは「コンテナにDバスなどのローカルシステムサービスへの完全なアクセス権を与えるため、安全ではないと見なされています」。

もちろん、localhost:9092で実行されているサービスをコンテナー化すると、Dockerコンテナーでも実行でき、-linkフラグを使用して2つのDockerコンテナーをリンクできます。

docker run -t -d myService
docker run -t -d --link myService:myService_ref myOtherService
13
GreensterRox

ホストのIPアドレスを修正し、「extra_hosts」オプションを使用してdocker-compose経由でこれをdockerに渡すことができます。

何かのようなもの:

Sudo ifconfig lo0 alias 172.16.123.1 

次にdocker composeで:

extra_hosts:
 - "service.localhost:172.16.123.1"

次に、コンテナ内で次のことができるはずです。

ping service.localhost
4
GreensterRox

コメントを追加できません。だから、これは正義であり、私を助けてくれた以前の答えの更新です。

コンテナからローカルマシンに接続します。 localhostのIPエイリアスを作成する

Sudo ifconfig lo:0 172.18.1.1 up

Docker-compose設定サービス行に追加

extra_hosts:
      - 'local.machine:172.18.1.1'

コンテナの再起動後、接続に使用できます

'web-socket-server' => 'ws://172.18.1.1',
1
Hesy Ra