問題描述
【k8s】或【普通容器】或【Linux】部署的RabbitMQ啓動時出現了 epmd error for host xx.xx: nxdomain (non-existing domain)
錯誤,MQ無法啓動成功。
其中 xx.xx
爲無法解析的域名。
RabbitMQ官方還提到報錯
Error during startup: {error,no_epmd_port}
也是同樣的情況。
解決辦法
這裏簡單記錄下解決辦法,分別以 Linux環境、docker容器環境、k8s環境、說明下。
Linux環境
/etc/hosts 文件添加域名解析 xx.xx
到 127.0.0.1
,以下示例:
127.0.0.1 mydomain.io
docker容器環境
docker run命令添加 --add-host
參數
--add-host="" : Add a line to /etc/hosts (host:IP)
示例:
docker run -d --add-host="mydomain.io:127.0.0.1" -p 5672:5672 rabbitmq:latest
k8s環境
在 podTemplate的spec下添加 hostname
寫上域名,當rabbitmq訪問該域名時自動映射到POD上。
示例:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: rabbitmq
labels:
app: rabbitmq
spec:
replicas: 1
selector:
matchLabels:
app: rabbitmq
serviceName: rabbitmq
template:
metadata:
labels:
app: rabbitmq
spec:
hostname: "mydomain.io"
containers:
- name: rabbitmq
image: 'rabbitmq:latest'
ports:
- name: tcp-5672
containerPort: 5672
protocol: TCP
env:
- name: TZ
value: 'Asia/Shanghai'
k8s官方文檔上還有添加 hostAlias
的辦法,這裏簡單截個圖放一下文檔地址:https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec
參考: