Laravel docker:adsist-docker_app_1 已退出,代码为 1

Laravel docker: adsist-docker_app_1 exited with code 1

我正在尝试建立一个 Laravel 项目。

设置为:

我为 App、Web、数据库拆分了容器

应用容器无法 运行 :(

这是我的 docker-compose.yml:

version: '2'
services:

  # The Application
  app:
    build:
      context: ./
      dockerfile: app.dockerfile
    working_dir: /var/www
    volumes:
      - ./:/var/www
    environment:
      - "DB_PORT=3306"
      - "DB_HOST=database"

  # The Web Server
  web:
    build:
      context: ./
      dockerfile: web.dockerfile
    working_dir: /var/www
    volumes_from:
      - app
    ports:
      - 8080:80

  # The Database
  database:
    image: mysql:5.6
    volumes:
      - dbdata:/var/lib/mysql
    environment:
      - "MYSQL_DATABASE=homestead"
      - "MYSQL_USER=homestead"
      - "MYSQL_PASSWORD=secret"
      - "MYSQL_ROOT_PASSWORD=secret"
    ports:
      - "33061:3306"

volumes:
  dbdata:

这是我的app.dockerfile

FROM centos:7.5.1804

RUN yum update -y

RUN yum install epel-release http://rpms.remirepo.net/enterprise/remi-release-7.rpm yum-utils -y && \
    yum-config-manager --enable remi-php72 && \
    yum update -y

RUN yum install vim wget curl unzip \
    php php-json php-gd php-mbstring php-pdo php-xml php-mysqlnd -y

RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
    php composer-setup.php --install-dir=/usr/local/bin --filename=composer && \
    rm -rf composer-setup.php

RUN curl -sL https://rpm.nodesource.com/setup_8.x | bash - && \
    yum install nodejs -y

RUN yum clean all

EXPOSE 80

# Keep container active
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

这是我的web.dockerfile:

FROM httpd:2.4

COPY httpd.conf /etc/httpd/conf/httpd.conf

当我 运行 docker-compose up 显示一些消息时:

app_1 | AH00526: Syntax error on line 119 of /etc/httpd/conf/httpd.conf: app_1 | DocumentRoot '/var/www/html' is not a directory, or is not readable

adsist-docker_app_1 exited with code 1

当您将 Apache 配置为使用 /var/www/html/ 作为文档根目录时,您的应用程序似乎将部署在 /var/www/ 中,因此在启动 Apache 时它首先检查配置的文档根目录,但它不能找到它,使其无法启动并生成上述错误。

因此您必须决定将 httpd.conf 中的文档根目录更改为指向 /var/www/ 或配置 docker-compose 文件以工作并将卷装载到 /var/www/html

/var/www/html 设置为 apache documentroot 在大多数 linux 发行版中很流行,但这不是 httpd docker 图像中的东西。此外,即使您将 http.conf 修改为使用 /var/www/html,您仍然应该挂载到 /var/www/html,而不是 /var/www

然后回到 httpd 图像,您可以看到下一个:

$ docker run -idt httpd:2.4
docker ps
CONTAINER ID    IMAGE       COMMAND              CREATED STATUS  PORTS               NAMES
182c63e24082    httpd:2.4   "httpd-foreground"   3 seconds ago   Up 1 second 80/tcp  clever_bassi
$ docker exec -it clever_bassi /bin/bash
root@182c63e24082:/usr/local/apache2/conf# cat httpd.conf
......
DocumentRoot "/usr/local/apache2/htdocs"
......

因此,如果您不更改默认设置,您应该将主机的文件挂载到 /usr/local/apache2/htdocs 以提供服务。

还有,你的Dockerfile中的COPY httpd.conf /etc/httpd/conf/httpd.conf也不对,应该是COPY httpd.conf /usr/local/apache2/conf/httpd.conf.