【问题标题】:Unable to connect to Rabbit MQ instance when running from docker container built by dockerfile从 dockerfile 构建的 docker 容器运行时无法连接到 Rabbit MQ 实例
【发布时间】:2018-11-21 22:11:58
【问题描述】:

我们正在尝试将 rabbit 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 实例,我们可以通过 ssh 进入并验证它是否正在运行,但是当我们尝试连接到它时,我们收到一个错误:“ExtendedSocketException: 尝试访问一个访问权限禁止的方式”(我们使用的是 rabbit 的默认值 5672)。

我不确定我们在命令行中所做的工作与在 Dockerfile 中所做的工作之间可能存在什么差异。

【问题讨论】:

    标签: docker kubernetes rabbitmq


    【解决方案1】:

    看起来您需要公开很多其他端口。

    我能够使用thisrabbitmq:latestrabbitmq:3 看起来一样)生成 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"]
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我们的构建过程目前需要一个 dockerfile。你是说我们可以只拥有一个来自 rabbitmq:3 AS rabbitmq 的 dockerfile
      • 是的,这可行,但没有意义 - 为什么要重新打包现有图像?您实际上不需要构建自己的映像 - 只需创建基于 rabbitmq 的部署即可。此外,我衷心建议您不要只使用“rabbitmq”,这意味着“最新”标签,而是使用特定版本。这样您就可以确保您的所有部署都是相同的。
      猜你喜欢
      • 2019-04-25
      • 2021-09-16
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 2017-06-02
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多