我试图将部署在一个容器中的web应用程序连接到部署在另一个容器上的rabbitmq上。
通过依赖这个连接到带有docker的RabbitMQ容器,我创建了以下docker:
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: 5webapp是web应用程序的一种服务,在该服务中,我规定了以下的rabbitmq属性:
host = broker
port = 15672
login = guest
password = guest我选择'broker‘作为主机,在默认情况下使用docker中的服务名称来连接容器的文档中建议这样做。
这并不是work.Also,我试图使用"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"
}发布于 2020-04-12 08:01:08
尝试一个网络:
services:
webapp:
...
networks:
- mynetwork
broker:
...
networks:
- mynetwork
networks:
mynetwork:这还设置了内部DNS,因此您实际上可以使用broker作为webapp中的主机名来引用另一个容器。
发布于 2020-04-14 07:39:48
从您的评论来看,它看起来像是访问授权问题,而不是停靠端口问题。
首先,尝试从兔子-mq容器内部卷曲,从日志中看,您似乎没有在兔子容器上安装curl,所以请安装它并尝试。
然后尝试从外部(从您的机器):
只需在兔子容器中标出港口:"5672:5672“和"15672:15672”。
curl localhost:5672 (或直接对容器ip地址进行停靠检查和卷曲)。
这些图像是从相同的基本图像中构建的吗?也许你在兔子的照片里有不明飞行物。
同时尝试关闭您机器上的ufw并检查(如果有)。
最好的方式之间的集装箱之间的对接-撰写是通过网桥,所以最终你将不得不使用它。
https://unix.stackexchange.com/questions/579532
复制相似问题