如何在Docker中启动后运行配置命令?

时间:2017-05-18 00:07:24

标签: docker docker-compose hashicorp-vault

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

  1. 设置服务的环境变量,生成证书等
  2. 以后台模式运行服务。
  3. 运行配置命令以完成初始化服务。
  4. 显然,这不起作用,因为服务是在后台启动的,入口点脚本将以代码0退出。如何在配置完成后保持此容器运行?没有繁忙的循环运行是否可以这样做?

2 个答案:

答案 0 :(得分:1)

  

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

在众多选项中:

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

答案 1 :(得分:0)

您可以查看此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中运行代码。