gpt4 book ai didi

laravel - 如何使用 jwilder/whoami 在 Docker 中显示 laravel 主页

转载 作者:行者123 更新时间:2023-12-02 19:45:23 30 4
gpt4 key购买 nike

我在 Docker 中创建了一个新的 Laravel 项目,并且正在为我的项目创建一个 VirtualHost 域名。
我的 docker-compose.yml 看起来像这样。

version: '3'

networks:
laravel:

services:
nginx:
image: nginx:stable-alpine
container_name: nginx
ports:
- "8080:80"
volumes:
- ./src:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
- mysql
networks:
- laravel

webserver:
image: jwilder/whoami
environment:
VIRTUAL_HOST: my-app.localhost
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro

mysql:
image: mysql:5.7.29
container_name: mysql
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: homestead
MYSQL_USER: homestead
MYSQL_PASSWORD: secret
MYSQL_ROOT_PASSWORD: secret
SERVICE_TAGS: dev
SERVICE_NAME: mysql
networks:
- laravel

php:
build:
context: .
dockerfile: php.dockerfile
container_name: php
volumes:
- ./src:/var/www/html
ports:
- "9000:9000"
networks:
- laravel

composer:
image: composer:latest
container_name: composer
volumes:
- ./src:/var/www/html
working_dir: /var/www/html
depends_on:
- php
networks:
- laravel

npm:
image: node:13.7
container_name: npm
volumes:
- ./src:/var/www/html
working_dir: /var/www/html
entrypoint: ['npm']

artisan:
build:
context: .
dockerfile: php.dockerfile
container_name: artisan
volumes:
- ./src:/var/www/html
depends_on:
- mysql
working_dir: /var/www/html
entrypoint: ['php', '/var/www/html/artisan']
networks:
- laravel

当我去 my-app.localhost 我得到
i'm e12cf052rrf0 
当我去 localhost:8080 我得到 Laravel 主页
如何让 my-app.localhost 立即显示我的 laravel 主页?

最佳答案

您正在使用 docker 服务“nginx”为您的 Laravel 网页提供服务。该服务公开端口 8080 并将其绑定(bind)到容器内的端口 80。
这就是为什么当你访问 localhost:8080 时你看到的是你的 Laravel 主页,而当你加载 my-app.localhost 时你实际上看到的是服务“webserver”。
要允许 jwilder 反向代理将您的流量路由到您的 laravel 主页,您应该使用以下内容重写您的 nginx 服务:

version: '3'

networks:
laravel:

services:
nginx:
image: nginx:stable-alpine
container_name: nginx
environment:
VIRTUAL_HOST: my-app.localhost
volumes:
- ./src:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
- mysql
networks:
- laravel

webserver:
image: jwilder/whoami
environment:
VIRTUAL_HOST: whoami.localhost
networks:
- laravel

nginx-proxy:
image: jwilder/nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
- laravel

mysql:
image: mysql:5.7.29
container_name: mysql
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: homestead
MYSQL_USER: homestead
MYSQL_PASSWORD: secret
MYSQL_ROOT_PASSWORD: secret
SERVICE_TAGS: dev
SERVICE_NAME: mysql
networks:
- laravel

php:
build:
context: .
dockerfile: php.dockerfile
container_name: php
volumes:
- ./src:/var/www/html
ports:
- "9000:9000"
networks:
- laravel

composer:
image: composer:latest
container_name: composer
volumes:
- ./src:/var/www/html
working_dir: /var/www/html
depends_on:
- php
networks:
- laravel

npm:
image: node:13.7
container_name: npm
volumes:
- ./src:/var/www/html
working_dir: /var/www/html
entrypoint: ['npm']

artisan:
build:
context: .
dockerfile: php.dockerfile
container_name: artisan
volumes:
- ./src:/var/www/html
depends_on:
- mysql
working_dir: /var/www/html
entrypoint: ['php', '/var/www/html/artisan']
networks:
- laravel
现在您的应用程序在 my-app.localhost 上可用,并且您的 whoami 服务在 whoami.localhost 上可用。
在这种情况下,环境变量“VIRTUAL_HOST”决定了您的服务将在哪个 url 上被反向代理公开
更新:
我没有意识到您正在为您的 laravel 相关服务和反向代理使用不同的网络。
反向代理和您要公开的服务必须在同一个 Docker Network 上监听
在您的情况下,jwilder 反向代理正在监听由 docker-compose 创建的默认网络,但 nginx 服务器正在监听名为“laravel”的不同网络。除非您另行指定,否则 Docker compose 将始终为您创建网络。在同一网络上监听的所有服务都可以相互访问。
为了解决这个问题,你必须在 laravel 网络上注册反向代理。您可以通过在服务声明中添加网络标记来做到这一点,如下所示:
  nginx-proxy:
image: jwilder/nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
- laravel

webserver:
image: jwilder/whoami
environment:
VIRTUAL_HOST: whoami.localhost
networks:
- laravel
现在反向代理后面的两个服务都可以访问。

关于laravel - 如何使用 jwilder/whoami 在 Docker 中显示 laravel 主页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63711263/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com