使用不同的命令重启docker compose

时间:2019-12-04 14:09:08

标签: docker docker-compose

我在服务器上运行了一个应用程序,但是服务器以某种方式重新启动,但某些docker服务可以重新启动,而另一种则没有。

docker-compose ps:

    Name                   Command                 State                          Ports                     
------------------------------------------------------------------------------------------------------------
elasticsearch   /usr/local/bin/docker-entr ...   Up           0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp
kibana          sh -c ./bin/kibana-plugin  ...   Restarting                                                 
logstash        /usr/local/bin/docker-entr ...   Up           5044/tcp, 9600/tcp 

如果我尝试通过 docker kibana ps查看kibana的日志:

Plugin kbn_radar already exists, please remove before installing a new version
Found previous install attempt. Deleting...
Attempting to transfer from file:///usr/share/kibana/config/kbn_radar.zip
Transferring 3686700 bytes....................
Transfer complete
Retrieving metadata from plugin archive
Extracting plugin archive

问题是:kbn_radar需要很长时间才能重新启动,因此我想重新启动kibana服务而无需重新启动其他应用程序。我试图在运行命令以启动插件的地方更改.yml文件:

  kibana:
    image: docker.elastic.co/kibana/kibana:6.8.0
    command: 
    - sh 
    - -c
    - './bin/kibana-plugin install file:///usr/share/kibana/config/kbn_radar.zip && ./bin/kibana-plugin install file:///usr/share/kibana/config/ob-kb-funnel-6.8.zip && exec /usr/local/bin/kibana-docker'

所以最后,我的docker compose是:

docker-compose.yml:

version: "3"

networks:
  elasticsearch-net-624:

services:
  elasticsearch-products-624-service:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.8.0
    container_name: elasticsearch
    restart: always
    networks:
    - elasticsearch-net-624
    ports:
    - "9200:9200"
    - "9300:9300"
    expose:
    - "9200"
    volumes:
    - /home/docker/elastic.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    - /home/docker/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
    - /docker/elastic/data:/usr/share/elasticsearch/data
    - /docker/elastic/data/snapshots:/usr/share/elasticsearch/data/snapshots

  kibana:
    image: docker.elastic.co/kibana/kibana:6.8.0
    command: 
    - sh 
    - -c
    - 'exec /usr/local/bin/kibana-docker'
    container_name: kibana
    restart: always
    hostname: kibana
    networks:
    - elasticsearch-net-624
    environment:
    - SERVER_NAME=kibana.localhost
    - ELASTICSEARCH_URL=http://elasticsearch:9200
    - ELASTICSEARCH_HOST=elasticsearch
    - ELASTICSEARCH_PORT=9200
    - XPACK_GRAPH_ENABLED=true
    - XPACK_WATCHER_ENABLED=true
    - XPACK_ML_ENABLED=true
    - XPACK_MONITORING_ENABLED=true
    - XPACK_MONITORING_UI_CONTAINER_ELASTICSEARCH_ENABLED
    ports:
    - "5601:5601"
    expose:
    - "5601"
    links:
    - elasticsearch-products-624-service
    depends_on:
    - elasticsearch-products-624-service
    volumes:
    - /home/docker/kibana.yml:/usr/share/kibana/config/kibana.yml
    - /home/docker/ob-kb-funnel-6.8.zip:/usr/share/kibana/config/ob-kb-funnel-6.8.zip
    - /home/docker/kbn_radar.zip:/usr/share/kibana/config/kbn_radar.zip 
    - /home/morpheus/docker/dashboard_app.js:/usr/share/kibana/src/legacy/core_plugins/kibana/public/dashboard/dashboard_app.js

  logstash:
    image: docker.elastic.co/logstash/logstash:6.8.0
    container_name: logstash
    restart: always
    volumes:
    - /home/docker/logstash.yml:/usr/share/logstash/config/logstash.yml

最后,我尝试重新启动服务:

docker-compose -f docker-kibana.yml restart kibana

但是,该服务一直在尝试重新启动插件,如果我运行docker-compose ps,该命令将继续“ sh -c ./bin/kibana-plugin ...”

如何使用另一个命令重新启动docker服务?还是重新启动我的服务而不重新启动已经存在的插件?

2 个答案:

答案 0 :(得分:0)

我建议您为插件创建一个版本,而不是在容器启动时做所有事情。

一个简单的dockerfile可以解决您的问题

FROM docker.elastic.co/kibana/kibana:6.8.0
COPY ob-kb-funnel-6.8.zip kbn_radar.zip /usr/share/kibana/config/
RUN ./bin/kibana-plugin install file:///usr/share/kibana/config/kbn_radar.zip && 
    ./bin/kibana-plugin install file:///usr/share/kibana/config/ob-kb-funnel-6.8.zip
ENTRYPOINT /usr/local/bin/kibana-docker

接下来,您将需要使用docker-compose来构建映像。我们可以通过更新您的服务定义来做到这一点

kibana:
    build: 
      context: ./kibana
    container_name: kibana
    restart: always
    hostname: kibana
    networks:
    - elasticsearch-net-624
    environment:
    - SERVER_NAME=kibana.localhost
    - ELASTICSEARCH_URL=http://elasticsearch:9200
    - ELASTICSEARCH_HOST=elasticsearch
    - ELASTICSEARCH_PORT=9200
    - XPACK_GRAPH_ENABLED=true
    - XPACK_WATCHER_ENABLED=true
    - XPACK_ML_ENABLED=true
    - XPACK_MONITORING_ENABLED=true
    - XPACK_MONITORING_UI_CONTAINER_ELASTICSEARCH_ENABLED
    ports:
    - "5601:5601"
    expose:
    - "5601"
    links:
    - elasticsearch-products-624-service
    depends_on:
    - elasticsearch-products-624-service
    volumes:
    - /home/docker/kibana.yml:/usr/share/kibana/config/kibana.yml
    - /home/morpheus/docker/dashboard_app.js:/usr/share/kibana/src/legacy/core_plugins/kibana/public/dashboard/dashboard_app.js

正如您在服务定义中所看到的,我们将image替换为build。我们假设您的Dockerfile for kibana位于一个名为kibana的文件夹中,并且还包含您的插件zip文件。

接下来,您可以运行docker-compose build,它将为您的撰写堆栈生成所需的图像。

答案 1 :(得分:0)

问题在于,当您运行docker-composedocker stack时,将使用所有初始数据创建上下文。如果您以后更改此数据,例如您的情况下的command,则只有重新启动整个上下文(即,除非再次降低docker-compose或{{ 1}}。

但是,您可以尝试以下方法来运气:

  1. 使用您现在要运行的命令编辑撰写。
  2. 完全删除stack容器。我的意思是,不要尝试使用kibana重新启动kibana,而是要删除容器。 docker-compose
  3. 再次运行docker rm -f dir_kibana。它应该检测到docker-compose up丢失,然后再次运行。