我使用的图像是
quay.io/artemiscloud/activemq-artemis-broker
。
我的
docker-compose.yml
是:
version: "3"
services:
artemis:
image: quay.io/artemiscloud/activemq-artemis-broker
environment:
AMQ_USER: admin
AMQ_PASSWORD: password
ports:
- "5672:5672"
- "61616:61616"
- "8161:8161"
networks:
- backend
networks:
backend:
driver: bridge
当我运行
docker-compose up
时,容器可以成功运行。
然后我进入容器内部(容器 ID
5905b9
):
~ docker exec -it 5905b9 bash
[jboss@5905b996368e ~]$ pwd
/home/jboss
我可以看到,进去后默认路径是
/home/jboss
。
我还验证了容器内有
/home/jboss/broker/etc/
目录(默认情况下):
[jboss@5905b996368e ~]$ pwd
/home/jboss
[jboss@5905b996368e ~]$ ls
broker
[jboss@5905b996368e ~]$ ls ./broker/etc/
artemis-roles.properties artemis.profile bootstrap.xml jolokia-access.xml login.config
artemis-users.properties broker.xml log4j2.properties management.xml
我还验证了容器内有
/home/jboss/broker/bin/artemis
文件:
[jboss@5905b996368e ~]$ ls ./broker/bin/
artemis artemis-service
(请牢记上面的验证,它与下面的失败日志有关)
验证这些事情后。我通过
docker-compose down
停止了容器。
然后,我将
docker-compose.yml
修改为 mount 主机上的本地文件 ./config/my.json
到容器路径 /home/jboss/broker/etc/my.json
:
version: "3"
services:
artemis:
image: quay.io/artemiscloud/activemq-artemis-broker
environment:
AMQ_USER: admin
AMQ_PASSWORD: password
# mount local file to container path
volumes:
- ./config/my.json:/home/jboss/broker/etc/my.json
ports:
- "5672:5672"
- "61616:61616"
- "8161:8161"
networks:
- backend
networks:
backend:
driver: bridge
然后,我再次运行
docker-compose up
。然而,这一次容器启动失败了。日志显示此消息:
2024-03-03 18:51:40 /opt/amq/bin/launch.sh: line 49: /home/jboss/broker/bin/artemis: No such file or directory
2024-03-03 18:51:40 Running Broker
日志基本上表明
launch.sh
尝试访问文件 /home/jboss/broker/bin/artemis
但没有这样的文件。但就像我上面验证的那样,这个文件确实存在!
为什么修改
docker-compose.yml
以将本地文件挂载到该特定容器路径后,ActiveMQ Artemis 容器停止工作并抛出该奇怪的消息??
====更多调试信息====
我还注意到如果我将安装路径更改为:
volumes:
- ./config/my.json:/home/jboss/my.json
然后容器就可以成功运行了,我可以在容器路径中看到
my.json
:
[jboss@6af16611b85e ~]$ ls
broker my.json
但我需要把它放在里面
/home/jboss/broker/etc/
。
当
launch.sh
目录已存在时,quay.io/artemiscloud/activemq-artemis-broker
容器映像的broker
脚本不会创建代理实例,请参阅https://github.com/artemiscloud/activemq-artemis-broker-image/blob/ 1.0.25/modules/activemq-artemis-install/added/launch.sh#L17
您需要将环境变量
AMQ_RESET_CONFIG
设置为true
,以强制artemis在broker
目录已存在时创建代理实例,即
version: "3"
services:
artemis:
image: quay.io/artemiscloud/activemq-artemis-broker
environment:
AMQ_USER: admin
AMQ_PASSWORD: password
AMQ_RESET_CONFIG: true
# mount local file to container path
volumes:
- ./config/my.json:/home/jboss/broker/etc/my.json
ports:
- "5672:5672"
- "61616:61616"
- "8161:8161"
networks:
- backend
networks:
backend:
driver: bridge
或者,当您需要在
/home/jboss/broker
目录中挂载自定义文件时,您可以传递完整的代理实例。