laravel - 使用 URL 而不是服务名称将服务与 docker compose 连接

标签 laravel docker docker-compose laravel-passport laravel-sail

我有以下 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 服务用于 companies 服务的 OAuth 流程(Laravel Passport/socialite)。

我遇到的问题是,由于某些环境变量需要 login 服务名称在内部 docker 网络中发送 post 请求,但需要完整的 url ( https://login.test ),因此重定向会中断。浏览器重定向需要。

有问题的 .env 变量是:

LARAVEL_PASSPORT_HOST=login

有没有办法在内部 docker 网络中使用完整的 url https://login.test

最佳答案

查看如何使用network aliases

有关您的上下文的简单示例:

    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.test 访问 login 服务>。添加任意数量。

关于laravel - 使用 URL 而不是服务名称将服务与 docker compose 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68691904/

相关文章:

macos - Docker 基础镜像运行缓慢 Mac OS X

nginx - Dockerizing nginx 和 Flask

docker - Mysql容器无法将数据挂载到nfs文件夹

Docker-compose - 设置不是文字的环境变量

php - Laravel Eloquent 模型——模型扩展模型

php - 拉维尔 5.4 : How to order by count(column) in eloquent?

mysql - 如何显示mysql数据库中的几何格式数据?

mongodb - 将 Robo 3T 连接到 Docker MongoDB 容器

docker-compose 比例不适用于 haproxy

php - Laravel 5.4 查询生成器使用 orWhere 子句时缺少参数 2