使用 docker-compose 在 Docker 中运行 laravel/lumen

Posted

技术标签:

【中文标题】使用 docker-compose 在 Docker 中运行 laravel/lumen【英文标题】:Running laravel/lumen in Docker using docker-compose 【发布时间】:2018-06-07 15:30:29 【问题描述】:

我正在学习微服务架构,我想使用 docker-compose 设置一个简单的 lumen 应用程序在 3 个单独的容器中运行

web - 这将运行我的 nginx 前端服务器 app - 这将运行我的 php-fpm 数据库 - 这将运行我的 mysql 服务器

这是我的 docker-compose.yml

version: '2'
services:

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

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

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

volumes:
  dbdata:

部署/web.dockerfile

FROM nginx:alpine
ADD deploy/vhost.conf /etc/nginx/conf.d/default.conf

部署/app.dockerfile

FROM yavin/alpine-php-fpm:7.1
COPY deploy/php.ini /etc/php7/conf.d/50-setting.ini
COPY deploy/php-fpm.conf /etc/php7/php-fpm.conf

部署/php.ini

max_execution_time=30
max_input_time=60
memory_limit=128M
post_max_size=256M
upload_max_filesize=256M
error_reporting=E_ALL & ~E_DEPRECATED
display_errors=On
date.timezone=Europe/London

部署/php-fpm.conf

[www]
user = nobody
group = nobody
listen = [::]:9000
chdir = /var/www
pm = static
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
catch_workers_output = Yes

vhost.conf

server 
    listen 80;
    index index.php index.html;
    root /var/www/public;

    location / 
        try_files $uri /index.php?$args;
    

    location ~ \.php(/|$) 
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    

当我运行 docker-compse up 时,我可以看到一切运行良好:

但是当我访问 http://127.0.0.1:8080 时,我在 chrome 中收到 This site can’t be reached 错误。

我在 windows 上使用 Docker Toolbox,我的 docker 版本是:Docker version 17.10.0-ce, build f4ffd25

任何想法如何在 docker 上正确设置 LEMP 堆栈以运行简单的 lumen 应用程序?

【问题讨论】:

问题已更新。我意识到我的php-fpm.conf 中有错字,已更正,容器已重新构建,但我仍然无法访问我的应用程序。 【参考方案1】:

Docker Toolbox 是 Windows 和 Mac 上用于 Docker 的较旧解决方案。没有来自容器的本地主机代理(您不能使用localhost 来访问容器公开的端口)。

Docker Toolbox 实际上是 Docker Machine,它在后台运行一个虚拟机,这个虚拟机有一个 IP 地址。您可以使用以下方式获取 IP 地址:

docker-machine ip

或者:

docker-machine ip default

它会给你类似 192.168.88.100 的东西。然后,您将使用此地址访问您公开的端口,例如 http://192.168.88.100:8080/。

或者,您可以使用 docker-machine rm 删除 Docker Machine,卸载 Docker Toolbox,然后安装 Docker for Windows,这样您就可以访问 localhost 上已发布的容器端口。

【讨论】:

以上是关于使用 docker-compose 在 Docker 中运行 laravel/lumen的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 docker-compose 重启单个容器

如何让 docker-compose 始终从新图像重新创建容器?

Docker wwwhj6666com Compose18669144445 docke

Docker三剑客之一:Docker-compose

centos7 安装docker-compose

基于ARM64的CPU架构下的docker-compose安装