运行命令后退出Docker容器

时间:2019-12-24 10:09:54

标签: docker docker-compose

我有一个Docker Compose文件,该文件创建3个容器,在这些容器启动后,我需要添加一些设置任务。我的想法是我将使用Dockers command语句完成我的设置任务。

version: "3"

services:
  mariadb:
    image: wodby/mariadb:$MARIADB_TAG
    container_name: "${PROJECT_NAME}_mariadb"
    stop_grace_period: 30s
    environment:
      MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
      MYSQL_DATABASE: $DB_NAME
      MYSQL_USER: $DB_USER
      MYSQL_PASSWORD: $DB_PASSWORD
    volumes:
      - ./mariadb-init:/docker-entrypoint-initdb.d 

  php:
    image: wodby/drupal-php:$PHP_TAG
    container_name: "${PROJECT_NAME}_php"
    environment:    
      DB_HOST: $DB_HOST
      DB_PORT: $DB_PORT
      DB_USER: $DB_USER
      DB_PASSWORD: $DB_PASSWORD
      DB_NAME: $DB_NAME
      DB_DRIVER: $DB_DRIVER
      PHP_FPM_USER: wodby
      PHP_FPM_GROUP: wodby
      COLUMNS: 80 # Set 80 columns for docker exec -it.
    volumes:
      - ./Insider:/var/www/html
    command: ls

  nginx:
    image: wodby/nginx:$NGINX_TAG
    container_name: "${PROJECT_NAME}_nginx"
    depends_on:
      - php
    environment:
      NGINX_STATIC_OPEN_FILE_CACHE: "off"
      NGINX_ERROR_LOG_LEVEL: debug
      NGINX_BACKEND_HOST: php
      NGINX_SERVER_ROOT: /var/www/html/web
      NGINX_VHOST_PRESET: $NGINX_VHOST_PRESET
    ports:
      - '8000:80'
    volumes:
      - ./Insider:/var/www/html
    labels:
      - "traefik.http.routers.${PROJECT_NAME}_nginx.rule=Host(`${PROJECT_BASE_URL}`)" 

现在的问题是,当我删除此command: ls时,一切正常,但是在运行PHP之后,NGINXdocker-compose up -d容器都退出了 当我查看已停止的PHP容器的日志时,可以从ls获取输出,但不确定为什么我的容器会退出。

我是Docker的新手,所以请不要介意这是一个愚蠢的问题。

1 个答案:

答案 0 :(得分:2)

容器的寿命就是command的寿命,因此您的容器将在运行command: ls时退出,其中Nginx容器取决于php,PHP将在执行后退出ls

    depends_on:
      - php

请勿为PHP覆盖command。删除command,它应该可以工作。