Laravel docker:adsist-docker_app_1 已退出,代码为 1
Laravel docker: adsist-docker_app_1 exited with code 1
我正在尝试建立一个 Laravel 项目。
设置为:
- Centos
- 阿帕奇
- MySql
我为 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
.
我正在尝试建立一个 Laravel 项目。
设置为:
- Centos
- 阿帕奇
- MySql
我为 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
.