将本地文件挂载到ActiveMQ Artemis容器中的特定路径,容器停止工作

问题描述 投票:0回答:1

我使用的图像是

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/

docker docker-compose jboss activemq-artemis
1个回答
0
投票

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
目录中挂载自定义文件时,您可以传递完整的代理实例。

© www.soinside.com 2019 - 2024. All rights reserved.