【问题标题】:Cannot start rabbitmq-server in docker container, how to write this Dokcerfile?无法在 docker 容器中启动 rabbitmq-server,如何编写这个 Dockerfile?
【发布时间】:2017-05-02 09:13:35
【问题描述】:

无法在我的 docker 容器中启动 rabbitmq-server

这是我的 Dockerfile

# python official docker image, I have check that it is base on the debain jessie
# The first line of python:2.7 Dockerfile is "FROM buildpack-deps:jessie"
FROM python:2.7

# The rabbitmq-server install commands are as follow
# I am sure that if I execute those commands in a Debain Jessie Server
# The rabbitmq-server will be installed successfully and connectable
# But in the docker, it does not works
RUN echo 'deb http://www.rabbitmq.com/debian/ testing main' > /etc/apt/sources.list.d/rabbitmq.list
RUN wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | apt-key add -
RUN apt-get update && apt-get install -y --no-install-recommends rabbitmq-server && rm -rf /var/lib/apt/lists/*

RUN service rabbitmq-server restart

RUN service rabbitmq-server status

# A lot of other things about deploy my project
# A lot of other things about deploy my project
# A lot of other things about deploy my project
CMD ["xxx", "xxxx"]

这是构建 Dockerfile 中的一些输出

Step 4/6 : RUN apt-get ......
...
...
Adding system user `rabbitmq' (UID 105) ...
Adding new user `rabbitmq' (UID 105) with group `rabbitmq' ...
Not creating home directory `/var/lib/rabbitmq'.
invoke-rc.d: policy-rc.d denied execution of start.
Processing triggers for systemd (215-17+deb8u6) ...
Processing triggers for libc-bin (2.19-18+deb8u7) ...
 ---> 35eb870defca
Removing intermediate container c2aa80f72a12

Step 5/6 : RUN service rabbitmq-server restart
 ---> Running in cff316499bf0
Restarting message broker: rabbitmq-server.

Step 6/6 : RUN service rabbitmq-server status
 ---> Running in 2c03f8721cf8
Status of node rabbit@607924cbbc93 ...
Error: unable to connect to node rabbit@607924cbbc93: nodedown

DIAGNOSTICS
===========

attempted to contact: [rabbit@607924cbbc93]

rabbit@607924cbbc93:
  * connected to epmd (port 4369) on 607924cbbc93
  * epmd reports: node 'rabbit' not running at all
                  no other nodes on 607924cbbc93
  * suggestion: start the node

current node details:
- node name: 'rabbitmq-cli-30@607924cbbc93'
- home dir: /var/lib/rabbitmq
- cookie hash: nK/d5I704NfDDEZdnP6xPg==

The command '/bin/sh -c service rabbitmq-server status' returned a non-zero code: 3

问题出在哪里,如何解决?

我很困惑,因为安装命令是正确的,它们在 debain vps 上运行良好。

但是,它们在 docker 容器中效果不佳。

我的目的是让我的 python-celery 在这个容器中连接 rabbitmq-server,就在这个容器中。它不需要从这个容器外连接。

这里有一些关于这个问题的猜测

  1. 容器内的网络配置
  2. 请注意 docker build 中的第 4/6 步

【问题讨论】:

  • 为什么不用官方的兔子图呢?在您的示例中,要使其正常工作,您必须公开兔子端口(如果您想使用兔子管理插件,则为 5672 和 15672)
  • 那将是 2 个容器? rabbitmq 容器和我的项目容器?我对 Dokcerfile 很陌生。
  • 是的,您将拥有 Dockerfile 来构建任何容器(如果需要)和 docker-compose.yml 文件来编排容器。
  • 谢谢,它有效。但是我想在我的Dockerfile中找出导致rabbitmq-server失败的问题在哪里。

标签: python docker rabbitmq celery dockerfile


【解决方案1】:

正如我们在 cmets 中所讨论的,我建议您使用 rabbitmq 的官方 docker 镜像。因此,您最终将得到 2 个容器。在这种情况下:应用程序和兔子。 以下是 Dockerfile 和 docker-compose.yml 的示例:

Dockerfile:

# use base python image with python 2.7
FROM python:2.7

# add requirements.txt to the image
ADD requirements.txt /app/requirements.txt

# set working directory to /app/
WORKDIR /app/

# install python dependencies
RUN apt-get update
RUN apt-get -y install libpq-dev python-dev
RUN pip install -r requirements.txt

还有 docker-compose.yml 的例子:

version: '2'

services:
  # RabbitMQ
  rabbit:
    hostname: rabbit
    image: rabbitmq:3.6.1-management
    ports:
      - "5672:5672"  # we forward this port because it's useful for debugging
      - "15672:15672"  # here, we can access rabbitmq management plugin

  # App
  app:
    build:
      context: .
      dockerfile: Dockerfile
    hostname: app
    volumes:
      - .:/app  # mount current directory inside container
    ports:
      - "8000:8000"
    # set up links so that web knows about db and redis
    links:
      - rabbit

要启动新容器,请使用docker-compose build && docker-compose up -d

【讨论】:

  • 还有一个问题,如何在python中设置CELERY_BROKER_URL?似乎 amqp://uid:pwd@rabbit// 不起作用输出:消费者:无法连接到 amqp://uid:**@rabbit:5672//:[Errno -2] 名称或服务未知。
  • 网址是正确的,我用的一样。我的项目在 django 中。确保您的 rabbit 用户具有所需的权限
猜你喜欢
  • 2017-04-16
  • 2021-04-26
  • 2013-01-27
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多