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 &
用のシンプルな Java アプリケーションですpub/sub。
現在、rabbitmq を実行している別のコンテナーがあり、2 つのコンテナーをリンクしていますが、それぞれの試行が失敗し、pub/subコンテナーが起動しません。誰かがこの問題をデバッグする方法についてアドバイスできますか? どういうわけかdockerログには何もありません。
コンテナをリンクする方法は次のとおりです。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'