Laradock(docker)不断抛出http错误500

sti*_*edo 5 laravel docker boot2docker docker-compose

无论我尝试什么,当我访问我的 docker-machine ip 时,我都会收到 HTTP 错误代码 500。

我通过 Docker 工具箱运行 laradock(操作系统:Windows 10)并运行默认虚拟机。我已经按照视频中的说明设置了 laradock。

我已成功将所需的文件夹安装到虚拟机中,并根据虚拟机中代码的位置更改了 docker-compose.yml:

这是我的 docker-compose.yml 文件:

版本:'2'

服务:

Nginx 服务器容器

nginx:
    build: ./nginx
    volumes_from:
        - volumes_source
    volumes:
        - ./logs/nginx/:/var/log/nginx
    ports:
        - "80:80"
        - "443:443"
    links:
        - php-fpm
Run Code Online (Sandbox Code Playgroud)

PHP-FPM容器

php-fpm:
    build:
        context: ./php-fpm
        dockerfile: Dockerfile-70
    volumes_from:
        - volumes_source
    expose:
        - "9000"
    links:
        - workspace
Run Code Online (Sandbox Code Playgroud)

MySQL容器

mysql:
    build: ./mysql
    volumes_from:
        - volumes_data
    ports:
        - "3306:3306"
    environment:
        MYSQL_DATABASE: homestead
        MYSQL_USER: homestead
        MYSQL_PASSWORD: secret
        MYSQL_ROOT_PASSWORD: root
Run Code Online (Sandbox Code Playgroud)

PostgreSQL 容器

postgres:
    build: ./postgres
    volumes_from:
        - volumes_data
    ports:
        - "5432:5432"
    environment:
        POSTGRES_DB: homestead
        POSTGRES_USER: homestead
        POSTGRES_PASSWORD: secret
Run Code Online (Sandbox Code Playgroud)

MariaDB 容器

mariadb:
    build: ./mariadb
    volumes_from:
        - volumes_data
    ports:
        - "3306:3306"
    environment:
        MYSQL_DATABASE: homestead
        MYSQL_USER: homestead
        MYSQL_PASSWORD: secret
        MYSQL_ROOT_PASSWORD: root
Run Code Online (Sandbox Code Playgroud)

Neo4j容器

neo4j:
    build: ./neo4j
    ports:
        - "7474:7474"
        - "1337:1337"
    environment:
        - NEO4J_AUTH=homestead:secret
    volumes_from:
        - volumes_data
Run Code Online (Sandbox Code Playgroud)

MongoDB 容器

mongo:
    build: ./mongo
    ports:
        - "27017:27017"
    volumes_from:
        - volumes_data
Run Code Online (Sandbox Code Playgroud)

Redis容器

redis:
    build: ./redis
    volumes_from:
        - volumes_data
    ports:
        - "6379:6379"
Run Code Online (Sandbox Code Playgroud)

内存缓存容器

memcached:
    build: ./memcached
    volumes_from:
        - volumes_data
    ports:
        - "11211:11211"
    links:
        - php-fpm
Run Code Online (Sandbox Code Playgroud)

Beanstalkd 容器

beanstalkd:
    build: ./beanstalkd
    ports:
        - "11300:11300"
    privileged: true
    links:
        - php-fpm
Run Code Online (Sandbox Code Playgroud)

Beanstalkd 控制台容器

beanstalkd-console:
    build: ./beanstalkd-console
    ports:
        - "2080:2080"
    links:
        - beanstalkd
Run Code Online (Sandbox Code Playgroud)

工作区实用程序容器

workspace:
    build:
        context: ./workspace
        args:
            - INSTALL_PRESTISSIMO=false
    volumes_from:
        - volumes_source
    tty: true
Run Code Online (Sandbox Code Playgroud)

Laravel 应用程序代码容器

volumes_source:
    build: ./volumes/application
    volumes:
        - /c/Users/pomodoro.xyz/code:/var/www/laravel
Run Code Online (Sandbox Code Playgroud)

数据库数据容器

volumes_data:
    build: ./volumes/data
    volumes:
        - /var/lib/mysql:/var/lib/mysql
        - /var/lib/postgres:/var/lib/postgres
        - /var/lib/mariadb:/var/lib/mariadb
        - /var/lib/memcached:/var/lib/memcached
        - /var/lib/redis:/data
        - /var/lib/neo4j:/var/lib/neo4j/data
        - /var/lib/mongo:/data/db
Run Code Online (Sandbox Code Playgroud)

在下面添加更多容器

当我登录工作区并更改文件时,它们会反映到主机中,所以我在这方面很擅长。

这是我的工作容器中的文件夹结构(正如视频所示):

root@d463d55e545b:/var/www/laravel# ls -l
total 30
drwxrwxrwx 1 1000 staff 4096 Jul 20 19:58 app
-rwxrwxrwx 1 1000 staff 1646 Jul 20 19:58 artisan
drwxrwxrwx 1 1000 staff    0 Jul 20 19:58 bootstrap
-rwxrwxrwx 1 1000 staff 1272 Jul 20 19:58 composer.json
drwxrwxrwx 1 1000 staff 4096 Jul 20 19:58 config
drwxrwxrwx 1 1000 staff 4096 Jul 20 19:58 database
-rwxrwxrwx 1 1000 staff  503 Jul 20 19:58 gulpfile.js
-rwxrwxrwx 1 1000 staff   12 Jul 21 15:13 index.html
drwxrwxrwx 1 1000 staff 4096 Jul 23 09:24 laradock
-rwxrwxrwx 1 1000 staff  212 Jul 20 19:58 package.json
-rwxrwxrwx 1 1000 staff 1026 Jul 20 19:58 phpunit.xml
drwxrwxrwx 1 1000 staff 4096 Jul 23 10:39 public
-rwxrwxrwx 1 1000 staff 1918 Jul 20 19:58 readme.md
drwxrwxrwx 1 1000 staff    0 Jul 20 19:58 resources
-rwxrwxrwx 1 1000 staff  567 Jul 20 19:58 server.php
drwxrwxrwx 1 1000 staff    0 Jul 20 19:58 storage
drwxrwxrwx 1 1000 staff    0 Jul 20 19:58 tests
drwxrwxrwx 1 1000 staff    0 Jul 20 19:59 vendor
Run Code Online (Sandbox Code Playgroud)

所有 nginx.conf 文件等都被加载到容器中,正如我从 docker exec -it 到我的 nginx 容器中看到的那样。

作为参考,这是我的 laravel.conf

服务器 { 监听 80 default_server; 监听[::]:80 default_server ipv6only=on;

root /var/www/laravel/public;
index index.php index.html index.htm;
Run Code Online (Sandbox Code Playgroud)

server_name laravel.dev www.laravel.dev;

location / {
     try_files $uri $uri/ /index.php$is_args$args;
}

location ~ \.php$ {
    try_files $uri /index.php =404;
    fastcgi_pass php-upstream;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

location ~ /\.ht {
    deny all;
}
Run Code Online (Sandbox Code Playgroud)

}

和 nginx.conf:

用户www-数据;工作进程 4;pid /run/nginx.pid;

事件{worker_connections 2048; 多重接受;使用epoll;}

http { server_tokens 关闭;发送文件;tcp_nopush 开启;tcp_nodelay 开启;keepalive_timeout 15;types_hash_max_size 2048;client_max_body_size 20M;包括/etc/nginx/mime.types;default_type 应用程序/八位字节流;访问登录;错误登录;gzip 打开;gzip_disable“msie6”;包含 /etc/nginx/conf.d/.conf ;包括 /etc/nginx/sites-available/;open_file_cache 最大值=100;}

守护进程关闭;

这是我的 laravel 根目录的 .env 文件:

APP_ENV=本地 APP_DEBUG=true APP_KEY=SomeRandomString APP_URL= http://localhost

DB_CONNECTION=mysql DB_HOST=192.168.99.100 DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=秘密

CACHE_DRIVER=文件 SESSION_DRIVER=文件 QUEUE_DRIVER=同步

REDIS_HOST=192.168.99.100 REDIS_PASSWORD=空 REDIS_PORT=6379

MAIL_DRIVER=smtp MAIL_HOST=mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null

我还通过登录工作区容器并输入以下内容来设置该文件夹的权限:

chmod -R 777 存储引导/缓存

但我仍然在 docker-machine ip 上收到 http 500 错误。我缺少什么?

小智 0

我发现的一个潜在问题是您在 .env 中使用服务主机(DB_HOST、REDIS_HOST)的 IP 地址。这些 IP 地址可能会更改,因此使用容器名称作为主机地址更安全。在您的情况下,您需要使用“DB_HOST=mysql”和“REDIS_HOST=redis”。

http 500 意味着您的 nginx 配置可能没有任何问题,听起来更像是 Laravel 配置问题。我建议你检查你的 laravel 日志文件 ( storage/logs/laravel.log) 以获取更多信息。