docker-compose 创建容器但不启动 apache 容器

问题描述 投票:0回答:1

我正在使用 docker-compose 启动两个容器,一个是 apache 容器,另一个是 maria 容器。 maria 容器已启动,但 apache 容器在 docker 桌面仪表板上显示为已创建,但尚未启动。 我尝试删除 Dockerfile.apache 脚本,但它永远不会启动。 似乎它永远不会到达 EXPOSE 和最后的 CMD 行。 我该如何解决这个问题?

docker-compose.yml:

services:
  app-mysql:
    image: mariadb
    container_name: app-mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: BLahBL$h123abc
      MYSQL_DATABASE: db
    volumes:
      - ../dbfiles:/var/lib/mysql
    healthcheck:
      test: [ "CMD-SHELL", "exit | mysql -h localhost -P 3306 -u root -p$$MYSQL_ROOT_PASSWORD" ]
      interval: 5s
      timeout: 20s
      retries: 30
    networks:
      - app-net
  app-apache:
    build:
      context: .
      dockerfile: Dockerfile.apache
    container_name: app-apache
    ports:
      - "80:80"
    volumes:
      - ../app/:/var/www/html
      - ../../app-root:/root/app_main
    depends_on:
      app-mysql:
        condition: service_healthy
    networks:
      - app-net

networks:
  app-net:
    driver: bridge

Dockerfile.apache: 来自 ubuntu/apache2

COPY ["setup/php.ini", "/usr/local/etc/php/8.2/cli"]
RUN apt update && apt install -y curl \
    && apt-get install -y php php-mysql php-fpm php-mbstring default-mysql-client default-libmysqlclient-dev
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

CMD ["cd", "/root/app_main"]
CMD ["bash", "recreate.sh", "&"]
WORKDIR /var/www/html
EXPOSE 80
CMD apachectl -D FOREGROUND

启动容器的命令:

docker compose up
php docker apache docker-compose dockerfile
1个回答
0
投票

由于某些原因,app-mysql容器上找不到mysql,因此其健康检查失败。由于您的 app-apache 容器依赖于具有

condition: service_healthy
的 app-mysql,因此它无法启动。

您可以删除

condition: service_healthy
并保留
depends_on: app-mysql
。这样,您只需要运行 app-mysql 容器即可启动 apache 容器。

或者你可以使用 Dockerfile 在 app-mysql 容器上安装 mysql : Dockerfile.mariadb

FROM mariadb:latest 
 RUN apt-get update && apt-get install -y mysql-client

并编辑你的 docker-compose :

app-mysql:
build:
  context: .
  dockerfile: Dockerfile.mariadb
container_name: app-mysql
© www.soinside.com 2019 - 2024. All rights reserved.