【问题标题】:Using rabbitmq with docker in production在生产中使用 rabbitmq 和 docker
【发布时间】:2019-12-07 06:47:41
【问题描述】:

我目前有一个在 docker 容器中运行的小型服务器,该服务器使用由 docker-compose 使用 DockerHub image 运行的 RabbitMQ。

它运行良好,但我担心它可能无法正确配置用于生产(生产是一个简单的服务器,没有集群或任何花哨的东西)。特别是,我担心 RabbitMQ 生产清单中描述的disk space limit

我不确定如何通过 docker-compose 配置这些东西,因为图像定义的 env 变量似乎非常有限。

我的 docker-compose 文件:

version: '3.4'
services:
  rabbitmq:
    image: rabbitmq:3-management-alpine
    ports:
      - "5672:5672"
      - "15672:15672"
    volumes:
      - rabbitmq:/var/lib/rabbitmq
    restart: always
    environment:
      - RABBITMQ_DEFAULT_USER=user
      - RABBITMQ_DEFAULT_PASS=secretpassword

  my-server:
   # server config here

volumes:
  rabbitmq:

networks:
  server-network:
    driver: bridge

【问题讨论】:

  • 这取决于您使用什么操作系统作为 docker daemon 的主机。如果是 windows,那么 hyperV 机器的磁盘是所有 docker 容器的大小限制,如果是 Linux,它是实际系统如果我没记错的话
  • 我更担心的是 rabbitmq 本身施加的 disk_size_limit(根据文档约为 50MB)而不是 docker 磁盘大小(我使用的是 Linux btw)

标签: docker docker-compose rabbitmq


【解决方案1】:

disk_free_limit设置在/etc/rabbitmq/rabbitmq.conf,这里好像没有可用的环境。

因此,您只需用自己的 docker bind mount 卷覆盖 rabbitmq.conf 即可实现目标。

对于你的情况,如果你进入rabbitmq容器,你可以看到:

shubuntu1@shubuntu1:~$ docker exec  some-rabbit cat /etc/rabbitmq/rabbitmq.conf
loopback_users.guest = false
listeners.tcp.default = 5672

所以你只需要添加 disk_free_limit.absolute = 1GB 本地 rabbitmq.conf 并将其挂载到容器以覆盖默认配置,完整示例如下:

rabbitmq.conf:

loopback_users.guest = false
listeners.tcp.default = 5672
disk_free_limit.absolute = 1GB

docker-compose.yaml:

version: '3.4'
services:
  rabbitmq:
    image: rabbitmq:3-management-alpine
    ports:
      - "5672:5672"
      - "15672:15672"
    volumes:
      - rabbitmq:/var/lib/rabbitmq
      - ./rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf

volumes:
  rabbitmq:

networks:
  server-network:
    driver: bridge

现在检查是否生效:

$ docker-compose up -d
$ docker-compose logs rabbitmq | grep "Disk free limit"
rabbitmq_1  | 2019-07-30 04:51:40.609 [info] <0.241.0> Disk free limit set to 1000MB

您可以看到disk free limit 已设置为 1GB。

【讨论】:

  • 添加- ./rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf后,创建该文件并执行docker-compose up -d,日志只显示rabbitmq_1 | sed: can't move '/etc/rabbitmq/rabbitmq.confLNOkjP' to '/etc/rabbitmq/rabbitmq.conf': Resource busy
  • @angrykoala 抱歉,我没有注意到那里有rabbitmq docker官方问题,请参阅this,因此解决方案是在docker-compose.yaml中删除您的环境。在我的示例中,我也没有设置它。要设置环境,请在您的rabbitmq.conf 中设置default_user = admindefault_pass = YourStrongPasswort
  • 而且,另一个解决方案是不使用volume,使用你自己的dockerfile,在这个dockerfile中,使用COPY ./rabbitmq.conf /etc/rabbitmq/rabbitmq.conf,然后在compose.yaml中,使用你自己的docker镜像,基于官方rabbitmq docker镜像.这样,你仍然可以在你的 docker-compose.yaml 中使用environment
猜你喜欢
  • 2016-03-01
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
相关资源
最近更新 更多