laravel - 使用 URL 而不是服务名称通过 docker compose 连接服务
问题描述
我有以下 docker-compose 文件:
# For more information: https://laravel.com/docs/sail
version: '3'
services:
login:
build:
context: ${LOGIN}/vendor/laravel/sail/runtimes/8.0
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.0/app
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
volumes:
- '${LOGIN}:/var/www/html'
networks:
- sail
depends_on:
- mysql
companies:
build:
context: ${COMPANIES}/vendor/laravel/sail/runtimes/8.0
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.0/app
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
volumes:
- '${COMPANIES}:/var/www/html'
networks:
- sail
depends_on:
- mysql
mysql:
image: 'mysql:8.0'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- 'sailmysql:/var/lib/mysql'
networks:
- sail
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
retries: 3
timeout: 5s
webserver:
image: 'nginx:alpine'
volumes:
- '${NGINX_CONFIG}:/etc/nginx/conf.d'
- '${NGINX_CONFIG}/certs/:/etc/nginx/ssl'
ports:
- 80:80
- 443:443
networks:
- sail
depends_on:
- login
- companies
networks:
sail:
driver: bridge
volumes:
sailmysql:
driver: local
该login
服务用于 OAuth 流程(Laravel 护照/社交名流)companies
。
我遇到的问题是重定向中断,因为某些环境变量需要login
服务名称才能在内部 docker 网络中发送发布请求,但是浏览器重定向需要完整的 url ( https://login.test )。
有问题的 .env 变量是:
LARAVEL_PASSPORT_HOST=login
有没有办法https://login.test
在内部 docker 网络中使用完整的 url?
解决方案
了解如何使用网络别名
对于您的上下文中的一个快速示例:
login:
build:
context: ${LOGIN}/vendor/laravel/sail/runtimes/8.0
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.0/app
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
volumes:
- '${LOGIN}:/var/www/html'
networks:
sail:
aliases:
- login.test
depends_on:
- mysql
现在sail
网络中的所有机器都可以login
使用服务名称或别名来访问该服务login.test
。根据需要添加任意数量。
推荐阅读
- javascript - 如何使用 jquery 或 javascript 根据另一个组合框值制作组合框内容?
- c++ - 这个片段有什么作用?指向自身的静态指针
- javascript - 在异步模式下为 Python 创建锁定/解锁机制
- c++ - std::optional 作为 std::atomic 的模板参数
- scala - Sbt:从根项目调用子项目的源代码
- python - 为什么我的 Python 请求模块代码无法正常工作并让我自动登录 Reddit?它不断返回 400 响应
- python - 没有名为“tensorflow.python.ops.numpy_ops”的模块
- asp.net-mvc - 继续在谷歌文档查看器中停止的地方阅读 pdf
- java - 在 selenium Java 中使用内部 Web 元素属性检索 Web 元素
- javascript - 映射一个数组给了我一些数组的未定义,因为它们是空的