从dockerfile构建的docker容器运行时无法连接到Rabbit MQ实例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从dockerfile构建的docker容器运行时无法连接到Rabbit MQ实例相关的知识,希望对你有一定的参考价值。

我们正试图将一个兔子mq的实例放入我们的Kubernetes环境中。为此,我们必须将其实现到我们的构建和发布过程中,其中包括通过Dockerfile创建docker容器。

在我们的原始测试期间,我们使用以下命令手动创建了docker容器,并且它正常工作:

docker pull rabbitmq
docker run -p 5672:5672 -d --hostname my-rabbit --name some-rabbit rabbitmq:3
docker start some-rabbit

为了创建我们的docker文件,我们尝试了各种迭代,最新的是:

FROM rabbitmq:3 AS rabbitmq
RUN rabbitmq-server -p 5672:5672 -d --hostname my-rabbit --name some-rabbit 
EXPOSE 5672

我们还尝试使用Run rabbitmq-server而不是其他参数。

这确实创建了一个我们能够进入并验证它正在运行的兔子mq实例,但是当我们尝试连接它时,我们收到一个错误:“ExtendedSocketException:尝试以禁止的方式访问套接字它的访问权限“(我们使用兔子的默认值为5672)。

我不确定我们在命令行中做了什么和在Dockerfile中做了什么之间的区别。

答案

看起来你需要暴露很多其他端口。

我能够使用rabbitmq:latest生成rabbitmq:3this看起来相同)的Dockerfile命令:

ENV PATH=/usr/lib/rabbitmq/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin    
ENV GOSU_VERSION=1.10    
ENV RABBITMQ_LOGS=-   
ENV RABBITMQ_SASL_LOGS=-   
ENV RABBITMQ_GPG_KEY=0A9AF2115F4687BD29803A206B73A36E6026DFCA 
ENV RABBITMQ_VERSION=3.7.8   
ENV RABBITMQ_GITHUB_TAG=v3.7.8
ENV RABBITMQ_DEBIAN_VERSION=3.7.8-1
ENV LANG=C.UTF-8   
ENV HOME=/var/lib/rabbitmq    
EXPOSE 25672/tcp  
EXPOSE 4369/tcp
EXPOSE 5671/tcp
EXPOSE 5672/tcp
VOLUME /var/lib/rabbitmq
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["rabbitmq-server"]
另一答案

Dockerfile用于构建自己的映像,而不是运行容器。问题是 - 为什么你需要建立自己的rabbitmq图像?如果你不这样做 - 那么只需使用官方的rabbitmq图像(就像你最初那样)。我确定它已经内置了所有必需的EXPOSE指令还注意命令行参数“-p 5672:5672 -d --hostname my-rabbit --name some-rabbit rabbitmq:3”被传递给docker守护进程,不是兔子的过程。如果您想确保转发所有必要的端口 - 只需使用-P运行它。

以上是关于从dockerfile构建的docker容器运行时无法连接到Rabbit MQ实例的主要内容,如果未能解决你的问题,请参考以下文章

Docker容器学习梳理-Dockerfile构建镜像

dockerfile构建过程

Docker Dockerfile 指令

Dockerfile 和 docker-compose.yml的区别

如何用Dockerfile创建镜像

调试 Dockerfile - 每天5分钟玩转 Docker 容器技术(15)