首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法从同一网络上的容器获得响应,Docker,Mountebank

无法从同一网络上的容器获得响应,Docker,Mountebank
EN

Stack Overflow用户
提问于 2021-11-08 02:12:46
回答 1查看 334关注 0票数 0

我有一个Go应用程序和三个用于模拟/存根HTTP响应的应用程序、数据库和挂载银行的对接容器。

当test_api (app容器)提出请求时,我希望我的挂载银行容器返回一个适当的响应。

当我使用Postman调用端点时,挂载银行容器返回一个正确的响应。

但是,当我的test_api容器中的代码发送GET请求时,它总是收到以下代码

拨号tcp 127.0.0.1:3000:连接:连接被拒绝

下面是test_api如何向挂载银行容器发送请求

代码语言:javascript
运行
复制
func getSuper(id string) (*float64, error) {
    var url = "http://localhost:3000/ato/employee/?/balance"
    url = strings.Replace(url, "?", id, 1)
    log.Println("Sending request to this url: ", url)
    resp, err := http.Get(url)
    if err != nil {
        return nil, &errorhandling.RequestError{Context: "getSuper calling ato api", Code: errorhandling.Internal, Message: err.Error()}
    }
    body, err := resposeToByte(resp)
    if err != nil {
        log.Println("err in coverting response to byte[]:", err)
        return nil, &errorhandling.RequestError{Context: "getsuper resposeToByte", Code: errorhandling.Internal, Message: err.Error()}
    }
    superData, err := UnmarshalSuperDetails(body)
    if err != nil {
        return nil, &errorhandling.RequestError{Context: "UnmarshalSuperDetails())", Code: errorhandling.Internal, Message: err.Error()}
    }
    log.Println("super details ", superData)

    return &superData.SuperBalance, nil
}

这是我的船坞写作

代码语言:javascript
运行
复制
version: '3.7'

services:
  db:
    container_name: "test_db"
    platform: linux/x86_64
    build:
      context: .
      dockerfile: db.Dockerfile
    networks:
      - default
    restart: always
    ports:
      # <Port exposed> : < MySQL Port running inside container>
      - "3306:3306"
    # setting some env vars to create the DB
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: "secret"
      MYSQL_DATABASE: "IGD"
      MYSQL_USER: "tester"
      MYSQL_PASSWORD: "secret"
      # OR if you want to use "root" as the user, just these two lines
      # MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD}
      # MYSQL_DATABASE: ${DATABASE_NAME}

    # we mount a data volume to make sure we don't lose data
    volumes:
      - mysql_data:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password
  api:
    container_name:  "test_api"
    # we want to use the image which is build from our Dockerfile
    build:
      context: .
      dockerfile: api.Dockerfile
    ports:
      - "8080:8080"
    # we are depending on the mysql backend
    depends_on:
      - db
    # We mount the working dir into the container, handy for development
    # This is what makes the hot reloading work inside of a Docker container
    volumes:
      - .:/app/  
  mountebank:
    container_name: mountebank
    image: jkris/mountebank:latest
    build:
      context: .
      dockerfile: mb.Dockerfile
    volumes:
    - ./imposters:/imposters
    ports:
    - 2525:2525
    - 3000:3000
    #- 8090:8090
    command: --configfile /imposters/imposter.json --allowInjection
    networks:
      - default
networks:
  default:
volumes:
  mysql_data:

我的冒牌货:

代码语言:javascript
运行
复制
 { "port": 3000,
  "protocol": "http",
  "stubs": [
    {
      "predicates": [
        {
          "equals": {"path":"/ato/employee/a/balance"}
        }
      ],
      "responses": [
        {
          "is": {
            "statusCode": 404,
            "headers": {
              "Content-Type": "application/json"
            },
            "body": {"error": "value not available"}
          }
        }
      ]
    },
    {
      "predicates": [
        {
          "equals": {"path":"/ato/employee/58957fc7-4e24-44e5-9eb1-a7fa0297613b/balance"}
        }
      ],
      "responses": [
        {
          "is": {
            "statusCode": 200,
            "headers": {
              "Content-Type": "application/json"
            },
            "body": { "employeeId":"50ccf5d6-2056-4e0c-a160-4e51638410c7",
                      "superBalance":1050.0}
          }
        },
continues...

这是我的码头文件

代码语言:javascript
运行
复制
FROM alpine:3.14

ENV MOUNTEBANK_VERSION=2.4.0

RUN apk add --update nodejs-lts && \
    apk add --update npm
RUN npm install -g mountebank@${MOUNTEBANK_VERSION} --production

EXPOSE 2525
ENTRYPOINT ["mb"]
CMD ["start"]

如何对代码进行更改,以使test_api从挂载银行获得适当的响应?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-08 13:05:45

您应该更改您的test_api中的下一行;

代码语言:javascript
运行
复制
var url = "http://localhost:3000/ato/employee/?/balance"

与下面的一个;

代码语言:javascript
运行
复制
var url = "http://mountebank:3000/ato/employee/?/balance"

因为它们是不同的容器,所以您应该在Docker环境中指定它们的名称或IP。您的test_api请求到它的本地主机,在3000没有开放端口,您将得到连接拒绝错误。您可以查看码头联网以获得更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69878027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档