Docker 和RabbitMQ,删除后如何重新启动服务
Docker and RabbitMQ, how to startup service again after removing it
我正在尝试使用 docker 创建一个 rabbitmq 集群,根据下面这两个链接中提供的详细信息,我已经启动了它,但不确定如何启动 image/container在我再次删除它之后。
https://www.youtube.com/watch?v=w2kGd2VRJWE
https://www.youtube.com/watch?v=FzqjtU2x6YA
他用这个命令停止节点的第二个视频(请原谅这个名字,还不确定如何让它更简洁)
docker rm -f rabbitcluster_rabbit_node_3_1
所以我的问题是,如何启动上面刚刚删除的第三个?目前我已经尝试过这个命令,它是图像名称,但 get 似乎是单独启动的。
docker run -d rabbitcluster_rabbit_node_3
我可以使用 docker-compose.yml 中的任何内容吗?还是我必须使用 docker 运行,因为它似乎与 [=56] 断开连接=]-compose.yml 文件!?
这是我写的docker-compose.yml
version: "3.9"
services:
rabbit_node_1:
build: .
hostname: rabbit-1
environment:
- RABBITMQ_ERLANG_COOKIE = "ABCDYJLFQNTHDRZEPLOZ"
- RABBIT_NODENAME = rabbit1
- RABBITMQ_CONFIG_FILE = /etc/rabbitmq/rabbitmq.conf
- RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS = -rabbit log [{console,[{level,debug}]}]
ports:
- 8081:15672
- 5672:5672
- 4369:4369
rabbit_node_2:
build: .
hostname: rabbit-2
# Don't start any of these until rabbit1 is up
depends_on:
- rabbit1
environment:
- RABBITMQ_ERLANG_COOKIE = "ABCDYJLFQNTHDRZEPLOZ"
- RABBIT_NODENAME = rabbit2
- RABBITMQ_CONFIG_FILE = /etc/rabbitmq/rabbitmq.conf
- RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS = -rabbit log [{console,[{level,debug}]}]
ports:
- 8082:15672
rabbit_node_3:
build: .
hostname: rabbit-3
# Don't start any of these until rabbit1 is up
depends_on:
- rabbit1
environment:
- RABBITMQ_ERLANG_COOKIE = "ABCDYJLFQNTHDRZEPLOZ"
- RABBIT_NODENAME = rabbit3
- RABBITMQ_CONFIG_FILE = /etc/rabbitmq/rabbitmq.conf
- RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS = -rabbit log [{console,[{level,debug}]}]
ports:
- 8083:15672
# docker network create rabbitmq-cluster
networks:
default:
name: rabbitmq-cluster
这是 Dockerfile
FROM rabbitmq:3.9-management
COPY rabbitmq.conf /etc/rabbitmq/rabbitmq.conf
COPY definitions.json /etc/rabbitmq/definitions.json
COPY .erlang.cookie /var/lib/rabbitmq/.erlang.cookie
RUN chmod 700 /var/lib/rabbitmq/.erlang.cookie
这是rabbitmq.conf
loopback_users.guest = false
listeners.tcp.default = 5672
management.listener.port = 15672
management.listener.ssl = false
management.load_definitions = /etc/rabbitmq/definitions.json
cluster_name = cluster1
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
cluster_formation.classic_config.nodes.1 = rabbit@rabbit-1
cluster_formation.classic_config.nodes.2 = rabbit@rabbit-2
cluster_formation.classic_config.nodes.3 = rabbit@rabbit-3
最后这是 rabbitmq definitions.json 文件
{
"users": [
{
"name": "andrew",
"password": "test",
"tags": "administrator"
}
],
"vhosts": [
{
"name": "/"
}
],
"permissions": [
{
"user": "andrew",
"vhost": "/",
"configure": ".*",
"write": ".*",
"read": ".*"
}
],
"parameters": [],
"policies": [],
"exchanges": [
{
"name": "test.exchange",
"vhost": "/",
"type": "direct",
"durable": true,
"auto_delete": false,
"internal": false,
"arguments": {}
}
],
"queues": [
{
"name": "test.queue",
"vhost": "/",
"durable": true,
"auto_delete": false,
"arguments": {}
}
],
"bindings": [
{
"source": "test.exchange",
"vhost": "/",
"destination": "test.queue",
"destination_type": "queue",
"routing_key": "",
"arguments": {}
}
]
}
命令 docker rm -f
(强制)删除了一个 容器。之后您将无法再启动它,因为它已不存在。
如果您想从 docker-compose
文件中的服务 rabbit_node_3
创建一个新容器,您需要在 [=14] 所在的目录中使用 docker-compose
命令=] 居住地:
docker-compose up -d rabbit_node_3
其中:
up
告诉 docker-compose 从命名服务 (rabbit_node_3
) 创建容器
-d
告诉 docker-compose 您不想将终端连接到使用此命令启动的容器的 stdout
和 stderr
。它只会进入后台并释放您的终端以执行其他任务
我正在尝试使用 docker 创建一个 rabbitmq 集群,根据下面这两个链接中提供的详细信息,我已经启动了它,但不确定如何启动 image/container在我再次删除它之后。
https://www.youtube.com/watch?v=w2kGd2VRJWE
https://www.youtube.com/watch?v=FzqjtU2x6YA
他用这个命令停止节点的第二个视频(请原谅这个名字,还不确定如何让它更简洁)
docker rm -f rabbitcluster_rabbit_node_3_1
所以我的问题是,如何启动上面刚刚删除的第三个?目前我已经尝试过这个命令,它是图像名称,但 get 似乎是单独启动的。
docker run -d rabbitcluster_rabbit_node_3
我可以使用 docker-compose.yml 中的任何内容吗?还是我必须使用 docker 运行,因为它似乎与 [=56] 断开连接=]-compose.yml 文件!?
这是我写的docker-compose.yml
version: "3.9"
services:
rabbit_node_1:
build: .
hostname: rabbit-1
environment:
- RABBITMQ_ERLANG_COOKIE = "ABCDYJLFQNTHDRZEPLOZ"
- RABBIT_NODENAME = rabbit1
- RABBITMQ_CONFIG_FILE = /etc/rabbitmq/rabbitmq.conf
- RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS = -rabbit log [{console,[{level,debug}]}]
ports:
- 8081:15672
- 5672:5672
- 4369:4369
rabbit_node_2:
build: .
hostname: rabbit-2
# Don't start any of these until rabbit1 is up
depends_on:
- rabbit1
environment:
- RABBITMQ_ERLANG_COOKIE = "ABCDYJLFQNTHDRZEPLOZ"
- RABBIT_NODENAME = rabbit2
- RABBITMQ_CONFIG_FILE = /etc/rabbitmq/rabbitmq.conf
- RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS = -rabbit log [{console,[{level,debug}]}]
ports:
- 8082:15672
rabbit_node_3:
build: .
hostname: rabbit-3
# Don't start any of these until rabbit1 is up
depends_on:
- rabbit1
environment:
- RABBITMQ_ERLANG_COOKIE = "ABCDYJLFQNTHDRZEPLOZ"
- RABBIT_NODENAME = rabbit3
- RABBITMQ_CONFIG_FILE = /etc/rabbitmq/rabbitmq.conf
- RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS = -rabbit log [{console,[{level,debug}]}]
ports:
- 8083:15672
# docker network create rabbitmq-cluster
networks:
default:
name: rabbitmq-cluster
这是 Dockerfile
FROM rabbitmq:3.9-management
COPY rabbitmq.conf /etc/rabbitmq/rabbitmq.conf
COPY definitions.json /etc/rabbitmq/definitions.json
COPY .erlang.cookie /var/lib/rabbitmq/.erlang.cookie
RUN chmod 700 /var/lib/rabbitmq/.erlang.cookie
这是rabbitmq.conf
loopback_users.guest = false
listeners.tcp.default = 5672
management.listener.port = 15672
management.listener.ssl = false
management.load_definitions = /etc/rabbitmq/definitions.json
cluster_name = cluster1
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
cluster_formation.classic_config.nodes.1 = rabbit@rabbit-1
cluster_formation.classic_config.nodes.2 = rabbit@rabbit-2
cluster_formation.classic_config.nodes.3 = rabbit@rabbit-3
最后这是 rabbitmq definitions.json 文件
{
"users": [
{
"name": "andrew",
"password": "test",
"tags": "administrator"
}
],
"vhosts": [
{
"name": "/"
}
],
"permissions": [
{
"user": "andrew",
"vhost": "/",
"configure": ".*",
"write": ".*",
"read": ".*"
}
],
"parameters": [],
"policies": [],
"exchanges": [
{
"name": "test.exchange",
"vhost": "/",
"type": "direct",
"durable": true,
"auto_delete": false,
"internal": false,
"arguments": {}
}
],
"queues": [
{
"name": "test.queue",
"vhost": "/",
"durable": true,
"auto_delete": false,
"arguments": {}
}
],
"bindings": [
{
"source": "test.exchange",
"vhost": "/",
"destination": "test.queue",
"destination_type": "queue",
"routing_key": "",
"arguments": {}
}
]
}
命令 docker rm -f
(强制)删除了一个 容器。之后您将无法再启动它,因为它已不存在。
如果您想从 docker-compose
文件中的服务 rabbit_node_3
创建一个新容器,您需要在 [=14] 所在的目录中使用 docker-compose
命令=] 居住地:
docker-compose up -d rabbit_node_3
其中:
up
告诉 docker-compose 从命名服务 (rabbit_node_3
) 创建容器
-d
告诉 docker-compose 您不想将终端连接到使用此命令启动的容器的stdout
和stderr
。它只会进入后台并释放您的终端以执行其他任务