あるコンテナにデプロイされたWebアプリケーションを別のコンテナにデプロイされたRabbitmqに接続しようとしています。
docker-composeを使用してRabbitMQコンテナへの接続を使用して、次のdocker-composeを作成しました。
version: '3'
services:
webapp:
container_name: chat
build:
context: .
depends_on:
- broker
ports:
- "8080:8080"
broker:
container_name: rabbit_chat
image: rabbitmq
command: rabbitmq-server
expose:
- 5672
- 15672
healthcheck:
test: ["CMD", "curl", "-f", "http://broker:5672"]
interval: 30s
timeout: 10s
retries: 5
webappは、次のRabbitmq属性を指定したWebアプリケーション用のサービスです。
host = broker
port = 15672
login = guest
password = guest
このドキュメントでは、デフォルトのネットワーク接続コンテナにdocker-composeのサービス名を使用することをお勧めしますので、「broker」をホストとして選択しました。
これはうまくいきません。また、接続ホストとして「localhost」を使ってみました。
また、出力に表示される「rabbit_chat」コンテナも確認します。
"Log": [
{
"Start": "2020-04-11T14:54:25.0988242Z",
"End": "2020-04-11T14:54:25.2920557Z",
"ExitCode": -1,
"Output": "OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused \"exec: \\\"curl\\\": executable file not found in $PATH\": unknown"
}
答え1
試してみてくださいネットワーク:
services:
webapp:
...
networks:
- mynetwork
broker:
...
networks:
- mynetwork
networks:
mynetwork:
また、内部DNSを設定するので、実際にそれをbroker
ホスト名として使用してwebapp
他のコンテナを参照できます。
答え2
あなたの意見によると、これはDockerポートの問題ではなくアクセス権の問題のようです。
まず、Rabbit-mqコンテナ内でカールを試してみてください。ログを見るとウサギコンテナにカールがインストールされていないように見えるので、インストールしてみてください。
その後、外部で試してください(コンピュータから)。
ウサギコンテナのポートを「5672:5672」および「15672:15672」にマッピングします。
カールlocalhost:5672(またはdocker検証を実行し、コンテナのIPアドレスに直接カール)。
これらの画像は同じ基本画像でできていますか?たぶんあなたのウサギのイメージにufwがあるかもしれません。
また、コンピュータでufwをオフにしていることを確認してください。
docker-composeでコンテナ間で通信するための最良の方法はブリッジを介することであり、最終的にブリッジを使用する必要があります。