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 您不想将终端连接到使用此命令启动的容器的 stdoutstderr。它只会进入后台并释放您的终端以执行其他任务