【发布时间】:2019-10-08 16:52:16
【问题描述】:
我正在尝试创建一个易于部署的 docker 容器(或一组容器),它允许我和其他开发人员使用与我们的服务器环境相匹配的环境进行本地编码。
我已经成功部署了一个具有适当操作系统和 PHP 版本的容器,其中包含一个当前包含样板 Laravel 项目的卷。它正确地拉入代码,反映对外部代码库所做的更改。
我还生成了一个 nginx 容器(尽管理想情况下我希望将来将其简化为一个容器)。这呈现了“欢迎使用 nginx!”当我导航到http://localhost:8080/ 时的消息。
然而,我对 nginx 的了解非常少,不足以在我的另一个容器中为 Laravel 项目提供服务。它可能是可用的,我只是不知道正确的路由,但我想我已经排除了这一点。
我以前不需要问很多问题,因为我几乎总是能够通过资源来确定答案,但这对我来说是一个新的责任领域,如果问题是明显的或基本的,请见谅.
我的原始示例是基于 docker 映像 php:7.1.8-apache 构建的,并且服务非常好,但是它使用了不同的操作系统来满足我的要求以及错误的 PHP 版本。
我尝试合并图像,希望图层能够解决我的问题,但随后的图层覆盖了我原来图层的操作系统。我不确定是否可以更离散地累积图层。
所以现在我使用操作系统映像作为基础,然后应用 yum 命令来安装 PHP。容器内部,OS和PHP版本完美,代码存在。
我觉得我快到了,但我只是不知道如何在我的浏览器中访问通用 Laravel 项目并在应用代码更改时对其进行测试。
更新 我已经更新了文件以匹配下面的答案,并修复了我注意到的问题; default.conf 文件被复制到主 docker 中,而不是 nginx 中。将此修复与下面的答案结合起来,当我导航到 http://localhost:8080/ 时,我现在收到 502 Bad Gateway 错误。
Laravel 的 index.php 位于 \public 中,我尝试更新 default.conf 中的索引引用以匹配它,但没有运气。
当尝试加载 http://localhost:8080/ 时,docker 附件详细说明了以下错误,而不是欢迎来到 nginx 屏幕: [错误] 6#6: *24 connect() failed (111: Connection refused) while connect to upstream, client: 172.22.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://172.22.0.2:80/" , 主机: "localhost:8080"
在访问地址时,access.log 和 error.log 都没有记录任何详细信息。
docker-composer.yml
version: '3'
services:
app:
build:
context: .
dockerfile: .docker/primary/Dockerfile
image: base-docker
container_name: primarydocker
# ports:
# - 8080:80
volumes:
- .:/srv/jumbledown
restart: unless-stopped
tty: true
networks:
- draft-network
webserver:
build:
context: .
dockerfile: .docker/nginx/Dockerfile
container_name: webserver
ports:
- "8080:80"
- "443:443"
links:
- app
networks:
- draft-network
restart: unless-stopped
tty: true
#Docker Networks
networks:
draft-network:
driver: bridge
Dockerfile
FROM centos:7
RUN yum -y install epel-release yum-utils \
&& yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm \
&& yum-config-manager --enable remi-php71 \
&& yum -y install php php-common php-opcache php-mcrypt php-cli php-gd php-curl php-mysql
# && chown -R www-data:www-data /srv/jumbledown
COPY . /srv/jumbledown
# RUN docker-php-ext-install mbstring pdo pdo_mysql \
# && chown -R www-data:www-data /srv/jumbledown
用于 nginx 的 Dockerfile
FROM nginx:1.12
# ADD ./.docker/site.conf /etc/nginx/conf.d/
ADD ./.docker/nginx/default.conf /etc/nginx/conf.d/
default.conf
upstream appUpstream {
server app;
}
server {
listen 80;
index index.php
server_name jumbledown.com www.jumbledown.com;
client_max_body_size 30M;
location / {
proxy_pass http://appUpstream/;
proxy_redirect off;
proxy_buffering off;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
理想情况下,我希望能够运行docker-compose up --build,然后在我的浏览器中输入一个 URL,然后看到 Laravel 样板首页弹出。
【问题讨论】:
标签: php docker nginx docker-compose centos7