《阿里云标准-Docker安全基线检查问题》 要求使用–read-only以允许将容器的根文件系统挂载为只读。
本以为把rabbitmq文件目录: /etc/rabbitmq、/var/lib/rabbitmq、/var/log/rabbitmq挂载出来就ok了。结果对我来说还是个坑。以下是我本地docker启动命令:
docker run -d --name rabbitmq3.7.7-delayed-message --read-only --memory 512m -p 5672:5672 -p 15672:15672 -v /Users/wink/data/rabbitmq/etc/:/etc/rabbitmq -v /Users/wink/data/rabbitmq/lib/:/var/lib/rabbitmq -v /Users/wink/data/rabbitmq/log/:/var/log/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password e45ab5b63038
很好!顺利启动,以为没事了。但是我项目中用到了延迟消息的插件,理想当然的准备把延迟消息插件copy到rabbitmq插件目录中就可以了,因启动命令中的–read-only 导致不可以写入。
然后看了dockerhub上rabbitmq官方镜像说明(DockerHub_Rabbitmq),其中有这么一段
很好!那么思路来了。
我们在一个空文件下创建一个Dockerfile文件 因我用到了延迟消息,所以和Dockerfile同目录中还放了延迟消息的插件。
因此我对官方给出的的Dockerfile做了一些改动。如下:
FROM rabbitmq:3.7.7-management
MAINTAINER zuzjiqi
COPY rabbitmq_delayed_message_exchange-20171201-3.7.x.ez /plugins
RUN rabbitmq-plugins enable --offline rabbitmq_delayed_message_exchange
注意插件版本需与rabbitmq版本对其。
然后我们在Dockerfile目录下执行:
docker build -t rabbitmq-delayed-message .
执行成功后可以看到新增了一个镜像
这里我们先别着急启动!还有一步。
还需要在对应的:/etc/rabbitmq挂载目录中创建一个enabled_plugins文件
我这边就是在 /Users/wink/data/rabbitmq/etc/目录中创建enabled_plugins文件
内容为:[rabbitmq_delayed_message_exchange,rabbitmq_management].
然后我们再去通过上面启动命令启动
启动很顺利 我们再看下日志最后有这么一段我们看到了rabbitmq_delayed_message_exchange插件说明插件已经启动了。
启动项目调试下ok没有问题。解决!
这里我还看到了如下一篇文章
Docker中安装rabbitmq并启用插件