我正在使用 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
由于某些原因,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