【问题标题】:I can curl another docker container inside docker compose but not fetch in code我可以在 docker compose 中卷曲另一个 docker 容器,但不能获取代码
【发布时间】:2019-03-28 10:14:07
【问题描述】:

我无法从server container 获取到frontend container,即使我能够从frontend container 内部获得curl 响应。

我有一个带有前端和服务器容器的 docker-compose。 我想从前端获取服务器响应,但我收到错误GET http://server:5000/api/panels net::ERR_NAME_NOT_RESOLVED。如果我从前端容器 curl http://server:5000/api/panels 内执行以下命令,我会得到正确的响应

Dockerfile 服务器

FROM node:11
ADD . /code
WORKDIR /code
COPY package*.json ./

RUN npm install
COPY . .

EXPOSE 5000
CMD [ "node", "server" ]

Dockerfile 前端

FROM node:11
ADD . /frontend
WORKDIR /frontend
COPY package*.json ./

RUN npm install
COPY . .

EXPOSE 3000
CMD ["npm","start"]

docker-compose.yml

version: '3'

services:
  server:
    build: .

  frontend:
    depends_on:
      - server
    build: ./frontend
    ports:
      - "3030:3000"

api调用

this.callApi()
      .then((res: ISolarPanels) => {
        this.setState({ solarPanels: res })
      })
      .catch((err) => console.warn('server is offline?', err))

 private callApi = async () => {
    const response = await fetch(process.env.REACT_APP_URL+'/api/panels')
    const body = await response.json()\
    if (response.status !== 200) {
      throw Error(body.message)
    }
    return body
  }

package.json(我使用dev 脚本进行本地开发,start 用于docker

{
  "name": "frontend",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@types/d3": "^5.0.1",
    "d3": "^5.7.0",
    "prettier": "^1.13.5",
    "react": "^16.4.1",
    "react-dom": "^16.4.1",
    "react-scripts-ts": "2.16.0",
    "tslint-eslint-rules": "^5.3.1"
  },
  "scripts": {
    "lint": "node_modules/.bin/tslint -c tslint.json 'src/**/{*.ts,*.tsx}'",
    "dev": "REACT_APP_URL=http://localhost:3000 react-scripts-ts start",
    "start": "REACT_APP_URL=http://server:5000 react-scripts-ts start",
    "build": "react-scripts-ts build",
    "test": "react-scripts-ts test --env=jsdom",
    "eject": "react-scripts-ts eject"
  },
  "proxy": "http://localhost:5000/",
  "devDependencies": {
    "@types/node": "^10.3.3",
    "@types/react": "^16.3.17",
    "@types/react-dom": "^16.0.6",
    "typescript": "^2.9.2"
  }
}

【问题讨论】:

  • 您的主机网址是什么?
  • 现在,它是唯一的本地主机。前端是localhost:3030
  • 这个错误可能是因为很多问题。通常表示域名无法解析。它也可能是因为您的防火墙限制。
  • 你能不能通过点击 0.0.0.0 而不是 localhost 来尝试一下?
  • 我在0.0.0.0:3030localhost:3030 的前端收到同样的错误。

标签: node.js docker docker-compose create-react-app


【解决方案1】:

为了快速修复,您可以在您的服务器上允许CORShere

在您的网络应用程序中,您可以使用: 0.0.0.0:5000/api 用于指向服务器。

另外,您需要在 docker-compose.yml 文件中的server 服务中绑定您的端口。

  server:
    build: .
    ports:
      - "5000:5000"

【讨论】:

    【解决方案2】:

    总结出了什么问题以及如何解决问题。 该请求当然是从浏览器发送的,而不是前端容器,因此需要公开服务器端口并从服务器端启用 CORS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多