代码之家  ›  专栏  ›  技术社区  ›  Dan

无法执行从一个docker映像到另一个docker映像的API请求

  •  2
  • Dan  · 技术社区  · 6 年前

    我正在开发一个应用程序,其中我有一个react前端和一个javaspring后端。我有一个简单的API调用,我想返回一个新地址。我已经通过使用一个单独的容器来执行curl命令验证了这一点 docker container run --rm -it --net multichain-network byrnedo/alpine-curl http://multichain-api:8080/api/blockchain/address/create

    现在我已经使用 docker-compose

    version: "3.7"
    
    networks:
      multichain-network:
        driver: bridge
        ipam:
          driver: default
          config:
            - subnet: 172.18.0.0/16
        name: multichain-network
    
    services:
      multichain-api:
        build:
          context: ./blockchain
        networks:
          - multichain-network
        ports:
          - "8080:8080"
        volumes:
          - type: bind
            source: ${PWD}/blockchain/target
            target: /target
        container_name: multichain-api
    
      frontend:
        build:
          context: ./frontend
        networks:
          - multichain-network
        ports:
          - "3000:3000"
        volumes:
          - type: bind
            source: ${PWD}/frontend
            target: /frontend
        container_name: frontend
    

    我是一个相当新的反应,所以我想知道它是否可以在我的代码中做的事情,所以这里是一个片段,使调用;

    getNewAddress = () => {
        console.log("Button clicked");
        axios.get('http://multichain-api:8080/api/blockchain/address/create')
            .then(function (response) {
                console.log("getting new address");
                this.setState({newAddress: response.data});
                console.log(this.state.newAddress);
            })
            .catch(function (error) {
                console.log(error);
            })
    }
    

    docker exec frontend ping multichain-api
    PING multichain-api (172.18.0.4): 56 data bytes
    64 bytes from 172.18.0.4: seq=0 ttl=64 time=0.295 ms
    64 bytes from 172.18.0.4: seq=1 ttl=64 time=0.158 ms
    64 bytes from 172.18.0.4: seq=2 ttl=64 time=0.253 ms
    

    当我的代码试图进行调用时,这是在dev控制台上产生的错误;

    VM2194:1 GET http://multichain-api:8080/api/blockchain/address/create 0 ()
    (anonymous) @ VM2194:1
    dispatchXhrRequest @ xhr.js:178
    xhrAdapter @ xhr.js:12
    dispatchRequest @ dispatchRequest.js:59
    Promise.then (async)
    request @ Axios.js:51
    Axios.(anonymous function) @ Axios.js:61
    wrap @ bind.js:9
    Container._this.getNewAddress @ Container.js:12
    apply @ _apply.js:15
    baseInvoke @ _baseInvoke.js:21
    apply @ _apply.js:16
    (anonymous) @ _overRest.js:32
    (anonymous) @ Button.js:74
    callCallback @ react-dom.development.js:100
    invokeGuardedCallbackDev @ react-dom.development.js:138
    invokeGuardedCallback @ react-dom.development.js:187
    invokeGuardedCallbackAndCatchFirstError @ react-dom.development.js:201
    executeDispatch @ react-dom.development.js:461
    executeDispatchesInOrder @ react-dom.development.js:483
    executeDispatchesAndRelease @ react-dom.development.js:581
    executeDispatchesAndReleaseTopLevel @ react-dom.development.js:592
    forEachAccumulated @ react-dom.development.js:562
    runEventsInBatch @ react-dom.development.js:723
    runExtractedEventsInBatch @ react-dom.development.js:732
    handleTopLevel @ react-dom.development.js:4477
    batchedUpdates$1 @ react-dom.development.js:16660
    batchedUpdates @ react-dom.development.js:2131
    dispatchEvent @ react-dom.development.js:4556
    interactiveUpdates$1 @ react-dom.development.js:16715
    interactiveUpdates @ react-dom.development.js:2150
    dispatchInteractiveEvent @ react-dom.development.js:4533
    Container.js:19 Error: Network Error
        at createError (createError.js:16)
        at XMLHttpRequest.handleError (xhr.js:87)
    

    总之,我不确定这是一个反应,码头或浏览器的问题。查看我的后端应用程序的日志,当前端进行呼叫时,没有记录任何活动,因此它就像没有被击中一样。

    对此有任何见解都会很好

    更新

    我在Firefox上尝试了这个测试,看看是否是浏览器问题,开发人员控制台应该有一个额外的信息;

    Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://multichain-api:8080/api/blockchain/test. (Reason: CORS request did not succeed).

    1 回复  |  直到 6 年前
        1
  •  1
  •   Kayvan Nouredin    6 年前

    你有cors问题,不是码头工人问题。它说发出请求的服务器的源域(frontend-react)和服务器的源域(backend-multichainapi)是不同的,您可以找到cors系统架构 here