【问题标题】:How can I run configuration commands after startup in Docker?在 Docker 中启动后如何运行配置命令?
【发布时间】:2017-10-17 14:37:07
【问题描述】:

我设置了一个 Dockerfile 来运行一项服务,该服务需要运行一些后续命令才能正确初始化。我创建了一个具有以下结构的启动脚本并将其设置为我的入口点:

  1. 为服务设置环境变量、生成证书等
  2. 以后台模式运行服务。
  3. 运行配置命令完成初始化服务。

显然,这不起作用,因为服务是在后台启动的,并且入口点脚本将以代码 0 退出。配置完成后如何保持此容器运行?是否可以在没有繁忙循环运行的情况下这样做?

【问题讨论】:

    标签: docker docker-compose hashicorp-vault


    【解决方案1】:

    如何在配置完成后保持该容器运行?是否可以在没有繁忙循环运行的情况下这样做?

    在您的众多选择中:

    • 使用sleep inf 之类的东西,这不是一个繁忙的循环,也不会消耗 CPU 时间。
    • 您可以使用supervisord 之类的流程主管来启动您的服务并启动配置脚本。
    • 您可以在服务容器启动后在单独的容器中运行配置命令。

    【讨论】:

      【解决方案2】:

      您可以查看此 GitHub 问题和具体评论 - https://github.com/docker-library/wordpress/issues/205#issuecomment-278319730

      总而言之,您可以这样做:

      version: '2.1'
      services:
        db:
          image: mysql:5.7
          restart: always
          environment:
            MYSQL_ROOT_PASSWORD: wordpress
            MYSQL_DATABASE: wordpress
            MYSQL_USER: wordpress
            MYSQL_PASSWORD: wordpress
        wordpress:
          image: wordpress:latest
          volumes:
           - "./wp-init.sh:/usr/local/bin/apache2-custom.sh"
          depends_on:
            db:
              condition: service_started
          ports:
          - 80:80
          restart: always
          environment:
            WORDPRESS_DB_HOST: db:3306
            WORDPRESS_DB_PASSWORD: wordpress
          command: 
          - apache2-custom.sh
      

      wp-init.sh 是您编写要执行的代码的地方。

      注意command yml 标签:

      command: 
          - apache2-custom.sh
      

      因为我们在volumes 标记中限制了两者,它实际上会在您的容器中运行wp-init.sh 中的代码。

      【讨论】:

        猜你喜欢
        • 2021-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-09
        • 2019-05-21
        • 2017-09-13
        • 2023-03-09
        • 1970-01-01
        相关资源
        最近更新 更多