首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker和RabbitMQ :如何在删除服务后重新启动服务

Docker和RabbitMQ :如何在删除服务后重新启动服务
EN

Stack Overflow用户
提问于 2021-12-22 16:05:05
回答 1查看 225关注 0票数 0

我正在尝试使用docker创建一个rabbitmq集群,基于下面这两个链接中提供的详细信息,我已经启动了它,但不确定如何在再次删除它之后启动图像/容器。

https://www.youtube.com/watch?v=w2kGd2VRJWE

https://www.youtube.com/watch?v=FzqjtU2x6YA

第二个视频是他用这个命令停止一个节点(请原谅这个名字,还不知道如何使它更简洁)。

代码语言:javascript
复制
docker rm -f rabbitcluster_rabbit_node_3_1

因此,我的问题是,我如何启动第三个,我刚刚删除了上面?目前,我已经尝试了这个命令,它是图像名,但get似乎是单独启动的。

代码语言:javascript
复制
docker run -d rabbitcluster_rabbit_node_3

我可以使用来自docker-compose.yml的任何东西,还是必须使用docker运行,因为它现在似乎与docker-come.yml文件断开了!?

这是我写的docker-compose.yml

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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文件。

代码语言:javascript
复制
{
    "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": {}
        }
    ]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-22 16:17:58

命令docker rm -f (强制)移除容器。在那之后你不能再启动它了,因为它已经不存在了。

如果要从docker-compose文件中的服务docker-compose创建新容器,则需要在docker-compose.yml所在的目录中使用docker-compose命令:

docker-compose up -d rabbit_node_3

其中:

  • up告诉对接者-撰写从命名的服务创建容器,(rabbit_node_3)
  • -d告诉对接者-撰写,你不想把你的终端附加到容器的stdoutstderr上,由这个命令启动。它只会在后台释放您的终端来执行其他任务,
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70451922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档