简体   繁体   中英

Docker-compose won't keep base container running

I have a Dockerfile which builds a Debian image and installs Apache, Php, MySql.

In general, if I run docker commands:

docker build --tag my-project-image:2.0 .

And then

docker run -dit --name my-project-container \ 
    --mount type=bind,source=$(pwd),destination=/var/www/html \
    -p 80:80 --rm my-project-image:2.0

My container stays running and all the services I need for the development are up and running, so no issue with that.

I tried to move this config into a docker-compose but faced odd trouble. I believe I am making a very common mistake but I searched a lot tried lots of things but can't make it work.

To cut it short, when I run docker-compose up my image is built, it creates a container, runs all scripts and it exists instantly . The problem is that I want to keep that container running since I have a service like Apache and MySQL there.

I have two services one is lamp for apache, MySQL, and PHP and the other one is node just to run npm scripts.

node container stays up and running but lamp closes instantly, unfortunately.

This is my Dockerfile

FROM debian:latest
ENV DOC_ROOT=/var/www/html
WORKDIR ${DOC_ROOT}
RUN apt-get update
RUN apt-get --assume-yes upgrade
RUN apt-get --assume-yes install apache2
RUN apt-get --assume-yes install curl php-curl
RUN apt-get --assume-yes install php
RUN apt-get --assume-yes install php-mysql
RUN apt-get --assume-yes install composer
RUN apt-get --assume-yes install php-xdebug
RUN apt-get --assume-yes install default-mysql-server
RUN a2enmod rewrite
COPY ./ ${DOC_ROOT}
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
COPY config/000-default.conf /etc/apache2/sites-available/

EXPOSE 80

Here is my docker-compose.yaml file content

version: "3.2"
services:
  lamp:
    container_name: lamp-stack
    build: .
    ports:
      - 80:80
    volumes:
    - .:/var/www/html
    command: >
      /bin/sh -c "service apache2 start && \
        service mysql start && \
        mysql < migrations/migrations.sql && \
        mysql < migrations/development.sql && \
        bash"
  node:
    container_name: node-builder
    image: node:12-alpine3.9
    depends_on:
      - lamp
    working_dir: /var/www/html
    volumes:
    - .:/var/www/html
    command: >
      /bin/ash -c "npm run build:dev > ./.logs/npm/npm-build.log && \
        npm run watch:sass > ./.logs/npm/sass-watch.log"


This is the output while I run docker-compose up

在此处输入图像描述

I have included bash as the last command in the end but it seems it is not working in docker-compose as I thought it supposed to. It keeps my container running only when I am not using docker-compose command:(.

Any ideas what I might be doing wrong?

Try to add those lines in your docker-compose:

stdin_open: true # equivalent of -i
tty: true        # equivalent of -t

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM