Docker 容器的跨源错误

Posted

技术标签:

【中文标题】Docker 容器的跨源错误【英文标题】:Cross origin error with Docker containers 【发布时间】:2019-02-21 10:16:57 【问题描述】:

我正在本地构建一个使用微服务的应用程序,然后在 docker 容器上构建 我目前有 Eureka、带有 Spring Security 的 Zuul、一个使用 Spring boot 2 的微服务和一个 Angular 6 客户端

我在 Zuul 上对 Spring Security 进行了参数化以管理安全性和 CORS,扩展 WebSecurityConfigurerAdapter 类,覆盖 configure 方法,... 在本地它完美地工作。我的客户 (http://localhost:4200) 可以通过 Zuul (http://localhost:8762/microservice/api/...) 访问 API,并使用 OPTION 添加基本身份验证标头。

但是对于使用 Docker Compose 构建的 Docker 容器,情况就不一样了。 Chrome 抛出“未知异常”,而 Firefox 在 选项请求。客户端通过 Zuul 调用 API,如下所示:http://gdt-gateway-proxy-service:8762/microservice/api/...

这是我的docker-compose.yml 文件的一部分,涉及客户端 (gdt-client) 和 Zuul (gdt-gateway-proxy-service):

version: '2'
services:

    ...

    gdt-gateway-proxy-service:
        container_name: alpine-jdk8-gdt-gateway-proxy-service
        build:
            context: .
            dockerfile: Dockerfile.gdt-gateway-proxy-service
        image: alpine-jdk8-gdt-gateway-proxy-service:latest

        ...

        expose:
            - 8762
        ports:
            - 8762:8762
        networks:
            - gdt-network


    ...


    gdt-client:
        container_name: alpine-httpd-gdt-client
        build:
            context: .
            dockerfile: Dockerfile.alpine.httpd-gdt-client
        image: alpine-httpd-gdt-client:base
        expose:
            - 4200
        ports:
            - 4200:80
        networks:
            - gdt-network
        links:
            - gdt-gateway-proxy-service:gdt-gateway-proxy-service
        depends_on:
            - gdt-gateway-proxy-service
        logging:
            driver: json-file
networks:
    gdt-network:
        driver: bridge

【问题讨论】:

【参考方案1】:

我解决了在控制器上方添加注释@CrossOrigin 的问题。本地不需要。

【讨论】:

no result 在 docker inspect b39033582bd6 | grep compose 上使用 Docker 版本 20.10.5, build 55c4c88Ubuntu 20.04.2 LTS上搜索 docker-compose.yml >

以上是关于Docker 容器的跨源错误的主要内容,如果未能解决你的问题,请参考以下文章

实战|两种常用的跨主机Docker容器互通方法

docker的跨主机网络Overlay,MacVlan网络的实现

Docker容器跨主机通信之:直接路由方式

使用 CORS 过滤器的跨源请求

AngularJS错误:仅支持协议方案的跨源请求:http,数据,chrome扩展,https

Docker容器跨主机多网段通信解决方案