我正在使用dockerfiles来构建一个简单的容器。这是Dockerfile
:
FROM XXXXXXX:5003/base-java
MAINTAINER XXXXX
ADD pubsub/ /opt/pubsub/
CMD ["/opt/pubsub/run.sh"]
run.sh
的内容如下:
#!/bin/bash
nohup java -jar /opt/pubsub/publish.jar &
nohup java -jar /opt/pubsub/subscribe.jar &
这是pub/sub
的简单java应用程序。
现在我有另一个运行rabbitmq的容器,我正在连接2个容器,但是我的每个尝试都失败了,而我的pub/sub
容器没有启动。有人可以建议如何调试这个问题吗?不知怎的,码头日志没有任何东西。
以下是我如何链接容器:sudo docker run -d -P --name pub_sub --link rabbitmq:rabbitmq1 image_pub_sub
以下是我在pub/sub
代码
factory = new ConnectionFactory();
factory.setHost("rabbitmq1");
try { connection = factory.newConnection();
channel = connection.createChannel();
channel.queueDeclare("pub", true, false, false, null);
}
catch (IOException e) { // TODO Auto-generated catch block
e.printStackTrace(); }
我原以为我的发布代码会在rabbitmq容器中创建一个队列并开始推送消息。我的用户代码基本上会连接到同一个rabbitmq并开始阅读消息。
当我运行命令时没有任何反应它只打印新容器的长ID并退出..当我运行sudo docker ps -a
时,我可以看到以下内容:
e8a50d5aefa5 image_pub_sub:latest "/opt/pubsub/run.sh" 32 minutes ago Exited (0) 32 minutes ago pub_sub
所以这意味着我的容器没有运行。
刚才我通过使用以下命令启动新容器来更新/etc/hosts
进行测试:sudo docker run -i -t image_pub_sub /bin/bash
。修改了此新容器的/etc/hosts
并添加了以下条目<IP_ADDRESS> rabbitmq1
并运行了我的脚本/opt/pubsub/run.sh
,并将nohup文件附加了以下消息:
Message Sent
[x] Received 'Hello'
Message Sent
Message Sent
[x] Received 'Hello'
答案 0 :(得分:5)
Docker容器将在其主进程完成时停止。在您的情况下,这意味着两个Java应用程序将分叉到后台(因为nohup
调用),然后脚本将立即完成,容器将退出。
有一些解决方案:
nohup
调用。这样,脚本就会退出,直到第二个Java应用程序退出。答案 1 :(得分:0)
可以使用tail -f / dev / null或尾随日志