目前,我正在运行一个3节点的Rabbitmq集群,使用下面的docker-comple文件。
rabbit1:
image: rabbitmq-server:0.0.1
hostname: rabbit1
ports:
- "5672:5672"
- "15672:15672"
environment:
- RABBITMQ_DEFAULT_USER=root
- RABBITMQ_DEFAULT_PASS=root
- HOSTNAME=rabbit1
rabbit2:
image: rabbitmq-server:0.0.1
hostname: rabbit2
links:
- rabbit1
environment:
- CLUSTERED=true
- CLUSTER_WITH=rabbit1
- RAM_NODE=true
- HOSTNAME=rabbit2
ports:
- "5673:5672"
- "15673:15672"
rabbit3:
image: kumar/rabbitmq-server:0.0.1
hostname: rabbit3
links:
- rabbit1
- rabbit2
environment:
- CLUSTERED=true
- CLUSTER_WITH=rabbit1
- HOSTNAME=rabbit3
ports:
- "5674:5672"
这是Dockerfile包含的用于启动容器并形成集群的脚本。
#!/bin/bash
change_default_user() {
if [ -z $RABBITMQ_DEFAULT_USER ] && [ -z $RABBITMQ_DEFAULT_PASS ]; then
echo "Maintaining default 'guest' user"
else
echo "Removing 'guest' user and adding ${RABBITMQ_DEFAULT_USER}"
rabbitmqctl delete_user guest
rabbitmqctl add_user $RABBITMQ_DEFAULT_USER $RABBITMQ_DEFAULT_PASS
rabbitmqctl set_user_tags $RABBITMQ_DEFAULT_USER administrator
rabbitmqctl set_permissions -p / $RABBITMQ_DEFAULT_USER ".*" ".*" ".*"
fi
}
if [ -z "$CLUSTERED" ]; then
# if not clustered then start it normally as if it is a single server
/usr/sbin/rabbitmq-server &
rabbitmqctl wait /var/lib/rabbitmq/mnesia/rabbit\@$HOSTNAME.pid
change_default_user
tail -f /var/log/rabbitmq/rabbit\@$HOSTNAME.log
else
if [ -z "$CLUSTER_WITH" ]; then
# If clustered, but cluster with is not specified then again start normally, could be the first server in the
# cluster
/usr/sbin/rabbitmq-server &
rabbitmqctl wait /var/lib/rabbitmq/mnesia/rabbit\@$HOSTNAME.pid
tail -f /var/log/rabbitmq/rabbit\@$HOSTNAME.log
else
/usr/sbin/rabbitmq-server &
rabbitmqctl wait /var/lib/rabbitmq/mnesia/rabbit\@$HOSTNAME.pid
rabbitmqctl stop_app
if [ -z "$RAM_NODE" ]; then
rabbitmqctl join_cluster rabbit@$CLUSTER_WITH
else
rabbitmqctl join_cluster --ram rabbit@$CLUSTER_WITH
fi
rabbitmqctl start_app
# Tail to keep the a foreground process active..
tail -f /var/log/rabbitmq/rabbit\@$HOSTNAME.log
fi
fi
我需要将docker compose转换为docker run命令,并以集群格式启动所有三个容器。我面临的问题是,我需要一个单独的run命令,该命令可以用于逐个启动所有容器(仅按名称区分),并形成一个集群。我如何传递命令,如--link和一些特定的环境变量,使单个运行命令可以容纳所有的环境变量。
docker run -d --net mynet1 --ip 172.18.0.11 --hostname rab1 --add-host rab2:172.18.0.12 --add-host rab3:172.18.0.13 --name rab1con -p 15672:15672 -e HOSTNAME=rab1 kumar/rabbitmq-server:0.0.1
docker run -d --net mynet1 --ip 172.18.0.12 --hostname rab2 --add-host rab1:172.18.0.11 --add-host rab3:172.18.0.13 --name rab2con -p 15673:15672 -e HOSTNAME=rab2 -e CLUSTERED=true -e CLUSTER_WITH=rab1 kumar/rabbitmq-server:0.0.1
docker run -d --net mynet1 --ip 172.18.0.13 --hostname rab3 --add-host rab1:172.18.0.11 --add-host rab2:172.18.0.12 --name rab3con -p 15674:15672 -e HOSTNAME=rab3 -e CLUSTERED=true -e CLUSTER_WITH=rab1 kumar/rabbitmq-server:0.0.1
以下是3个docker命令,可用于启动容器并形成集群。是否有任何方法使其通用,以便我可以删除-e CLUSTER=true-e CLUSTER\u WITH=rab1
$ docker run -d --name=rabbit1 -h rabbit1 -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=root -e HOSTNAME=rabbit1 rabbitmq:3 && docker run --name=rabbit2 -d -h rabbit2 --link rabbit1 -p 5673:5672 -p 15673:15672 -e CLUSTERED=true -e CLUSTER_WITH=rabbit1 -e RAM_NODE=true -e HOSTNAME=rabbit2 rabbitmq:3 && docker run --name=rabbit3 -d -h rabbit3 --link rabbit1 --link rabbit2 -p 5674:5672 -e CLUSTERED=true -e CLUSTER_WITH=rabbit1 -e HOSTNAME=rabbit3 rabbitmq:3 && sleep 15 && docker run -it --name=bash --link rabbit1 --link rabbit2 --link rabbit3 bash
41fa0f064aefd6382d1d20b9b716df3ebb21b99b44882f8cf3ffb1e789103d5d
87c1fec7a8eadbe7745f9496bc53935a5e8ddaa68b90c2b4faaaf8843f2dd5a0
9dc4e612c993df4aeacffc384c6c445d5d3ecef3ec5bea73797f6a33809c52f1
bash-5.1# ping rabbit1
PING rabbit1 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.130 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.125 ms
--- rabbit1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.125/0.127/0.130 ms
bash-5.1# ping rabbit2
PING rabbit2 (172.17.0.3): 56 data bytes
64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.132 ms
64 bytes from 172.17.0.3: seq=1 ttl=64 time=0.243 ms
--- rabbit2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.132/0.187/0.243 ms
bash-5.1# ping rabbit3
PING rabbit3 (172.17.0.4): 56 data bytes
64 bytes from 172.17.0.4: seq=0 ttl=64 time=0.167 ms
64 bytes from 172.17.0.4: seq=1 ttl=64 time=0.118 ms
--- rabbit3 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.118/0.142/0.167 ms
bash-5.1# nc -zv rabbit2 5672
rabbit2 (172.17.0.3:5672) open
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7fbd718c6c18 rabbitmq:3 "docker-entrypoint.s…" 7 seconds ago Up 4 seconds 4369/tcp, 5671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:5674->5672/tcp rabbit3
9cdc70795d49 rabbitmq:3 "docker-entrypoint.s…" 10 seconds ago Up 7 seconds 4369/tcp, 5671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:5673->5672/tcp, 0.0.0.0:15673->15672/tcp rabbit2
f8533f132c59 rabbitmq:3 "docker-entrypoint.s…" 14 seconds ago Up 10 seconds 4369/tcp, 0.0.0.0:5672->5672/tcp, 5671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp rabbit1
我将docker映像更改为实际的rabbitmq:3
,以便能够运行命令。我还在命令链的末尾添加了bash
container,以检查rabbit{1,2,3}
是否在containers组中可用。
此外,docker compose文件也可以通过此服务转换为run命令
如果要使用,请不要忘记手动将-d
和-name=rabbit{1,2,3}
添加到运行
。
问题内容: 到目前为止,我主要使用eclipse。现在,我正在尝试从终端运行Java,但程序包存在问题。 这是我的文件: 我使用编译此代码,然后运行,它给我: 当我删除一切正常。我想念什么? 给出: 问题答案: 您需要在一个目录级别上运行java命令,并以完全合格的软件包名称提供它,例如: 请参阅Java Launcher如何查找用户类 以了解其工作方式。
您现在可以在任何浏览器上,以及在 Grid 上,同时运行所有 Selenium IDE 测试,而无需编写任何代码。 只需要安装 Selenium IDE 命令行运行器,获取必要的浏览器驱动程序(如果需要在本地运行测试),并从命令提示符启动运行器以及所需的选项。 图:命令行运行器,王顶,408542507@qq.com 1. 先决条件 命令行运行器需要以下依赖项才能工作: node(Node.js
问题内容: 我尝试运行此脚本: 现在的问题是:我怎样才能把这些变量,,到变量? 问题答案: Python有很多执行字符串格式化的方法。最简单的方法之一就是将字符串的各个部分简单地串联在一起:
在此步骤中,我们将运行来查看连接到特定网络的所有设备并收集有关它的更多信息。当我们有一个到目标的网络,并在网络上运行是有用的,而不是在周围的所有网络上运行它。 之前,我们在周围的所有网络上运行。现在将针对BSSID为50的网络运行。 下面使用相同的程序。命令如下: 其中, 是接入点MAC地址。它用于过滤无关的流量。 是嗅探的通道。 用于将所有数据存储在名为的文件中。这不是强制性的,可以跳过(不使用
我创建了一个shell脚本,用于执行系统升级。 在终端屏幕上,我们只想打印几条消息来通知用户更新的进度。 部分更新创建文件夹的tar文件以供备份-但当tar命令运行时,它会在屏幕上列出当前正在压缩的所有文件和文件夹-是否可以停止此信息出现在终端屏幕上?
问题内容: 我开发了OSGi捆绑包,通常通过Eclipse进行测试。在导出捆绑包之后,我得到了bundle.jar文件。我希望能够从命令行运行生成的文件。就像是: C:\ java -jar bundle.jar osgi_framework路径 但是,如何在其中包含osgi框架?而且,如何立即启动捆绑包? 问题答案: 您可以从命令行启动OSGi框架,如下所示。首先是春分: 注意 用VERSION