我试图在具有EFS持久性的AWSVPC网络上运行ECS中的RabbitMQ。
问题是,每次重新启动容器时,AWSVPC上的ECS都会重置主机名。这将导致rabbitmq在/var/lib/rabbitmq中启动一个全新的目录,因此它失去了所有的持久性。
启动它一次,/var/lib/rabbitmq将包含:
drwxr-xr-x 4 100 root 6.0K Dec 23 13:00 rabbit@ip-10-0-12-171
-rw-r--r-- 1 100 root 90 Dec 23 12:57 rabbit@ip-10-0-12-171-feature_flags
drwxr-xr-x 10 100 root 6.0K Dec 23 12:57 rabbit@ip-10-0-12-171-plugins-expand下一次启动时,IP将发生变化,其他所有内容都将被丢弃。
我尝试过设置HOSTNAME环境变量,但这没有任何效果。
我尝试过设置RABBITMQ_MNESIA_DIR,但是在第二次启动之后,容器只是循环,没有明显的错误信息供我在这里发布。
我尝试在容器上设置RABBITMQ_NODENAME=rabbitmq@rabbitmq.dev.local (一个route53托管域名)。但这导致了一个令人费解的错误:
[error] Supervisor net_sup had child net_kernel started with net_kernel:start_link(['rabbitmq@rabbitmq.dev.local',shortnames], false, net_sup_dynamic) at undefined exit with reason {'EXIT',nodistribution} in context start_error码头枢纽页上的示例只显示设置主机名。但是因为这是AWSVPC上的ECS,所以我不能只在容器定义中设置hostname。根据手册:
注意,如果使用awsvpc网络模式,则不支持hostname参数。
我只需要说服兔子主机名是静态的。我不在乎外部的域或主机名是什么,只是容器中的进程认为主机名是什么。除了任务定义中的hostname之外,还有其他方法来设置这个选项吗?
发布于 2022-09-19 21:40:36
我对mnesia使用EFS,将RABBITMQ_NODENAME设置为“兔子@localhost”,并指定RABBITMQ_MNESIA_DIR。
environment = [
{
name = "RABBITMQ_NODENAME"
value = "rabbit@localhost"
},
{
name = "RABBITMQ_MNESIA_DIR"
value = "/var/lib/rabbitmq/mnesia/fox"
}
]
...
mountPoints = [
{
"containerPath" : "/var/lib/rabbitmq/mnesia",
"sourceVolume" : "efs-rabbitmq-mnesia"
}
]
...
volume {
name = "efs-rabbitmq-mnesia"
efs_volume_configuration {
file_system_id = aws_efs_file_system.efs.id
transit_encryption = "ENABLED"
authorization_config {
access_point_id = aws_efs_access_point.mnesia.id
}
}
}https://serverfault.com/questions/1047321
复制相似问题