登录
首页 >  Golang >  Go问答

拨号127.0.0.1:8080时出现连接被拒绝的错误,需要查看码头应用程序

来源:stackoverflow

时间:2024-02-15 15:00:27 380浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《拨号127.0.0.1:8080时出现连接被拒绝的错误,需要查看码头应用程序》,涉及到,有需要的可以收藏一下

问题内容

我有两个 go 语言的应用程序。 user_management 应用程序,我首先运行 (docker-compose up --build),然后运行 ​​(docker-compose up --build) sport_app。 sport_app 依赖于 user_management 应用。

sport_app dockerfile 文件如下。

from golang:alpine

run apk update && apk upgrade && apk add --no-cache bash git openssh curl

workdir /go-sports-entities-hierarchy

copy . /go-sports-entities-hierarchy/
run rm -rf /go-sports-entities-hierarchy/.env
run go mod download
run chmod +x /go-sports-entities-hierarchy/scripts/*
run ./scripts/build.sh

add https://github.com/ufoscout/docker-compose-wait/releases/download/2.2.1/wait /wait
run chmod +x /wait

env gin_mode="debug" \
    gql_server_host="localhost" \
    gql_server_port=7777 \
    allowed_origins=* \
    user_management_server_url="http://localhost:8080/user/me" \
    # gqlgen config
    gql_server_graphql_path="graphql" \
    gql_server_graphql_playground_enabled=true \
    gql_server_graphql_playground_path="playground" \
# export necessary port
expose 7777

cmd /wait && ./scripts/run.sh

sport_app docker-compose.yml 文件如下。

version: '3'

volumes:
  postgres_data:
      driver: local
services:
  go-sports-entities-hierarchy:
      restart: always
      build:
        dockerfile: dockerfile
        context: .
      environment:
        wait_hosts: postgres:5432
        # web framework config
        gin_mode: debug
        gql_server_host: go-sports-entities-hierarchy
        gql_server_port: 7777
        allowed_origins: "*"
        user_management_server_url: http://localhost:8080/user/me
        # gqlgen config
        gql_server_graphql_path: graphql
        gql_server_graphql_playground_enabled: "true"
        gql_server_graphql_playground_path: playground
      ports:
        - 7777:7777
      depends_on:
        - postgres
        - redisearch
  go-sports-events-workflow:
      restart: always
      build:
        dockerfile: dockerfile
        context: .
      environment:
        wait_hosts: postgres:5432
        # web framework config
        gin_mode: debug
        gql_server_host: go-sports-events-workflow
        gql_server_port: 7778
        allowed_origins: "*"
        # gqlgen config
        gql_server_graphql_path: graphql
        gql_server_graphql_playground_enabled: "true"
        gql_server_graphql_playground_path: playground
      depends_on:
        - postgres
        - redisearch
        - go-sports-entities-hierarchy

用户管理应用程序 dockerfile 如下:

from golang:alpine

run apk update && apk add --no-cache git ca-certificates && update-ca-certificates

# set necessary environmet variables needed for our image
env go111module=on \
    cgo_enabled=0 \
    goos=linux \
    goarch=amd64

# move to working directory /build
workdir /build

# copy and download dependency using go mod
copy go.mod .
copy go.sum .
run go mod download

# copy the code into the container
copy . .

# build the application
run go build -o main .

# move to /dist directory as the place for resulting binary folder
workdir /dist

# copy binary from build to main folder
run cp -r /build/html .
run cp /build/main .

# environment variables
env db_host="127.0.0.1" \
    app_protocol="http" \
    app_host="localhost" \
    app_port=8080 \
    allowed_origins="*"

# export necessary port
expose 8080

add https://github.com/ufoscout/docker-compose-wait/releases/download/2.2.1/wait /wait
run chmod +x /wait

# command to run when starting the container
cmd /wait && /dist/main

user_management应用程序docker-compose.yml文件如下:

version: '3'

volumes:
  postgres_data:
      driver: local

services:
  postgres:
      image: postgres
      volumes:
        - postgres_data:/var/lib/postgresql/data
      ports:
        - 5432:5432
  go-user-management:
      restart: always
      build:
        dockerfile: dockerfile
        context: .
      environment:
        # postgres details
        db_port: 5432
        # app details
        app_protocol: http
        app_host: localhost
        app_port: 8080
        # system configuration details
        allowed_origins: "*"
      ports:
        - 8080:8080
      depends_on:
        - postgres

在 sport_app 中,我编写以下代码并收到错误:

client := resty.New()
resp, err := client.R().SetHeader("Content-Type", "application/json").SetHeader("Authorization", "Bearer "+token).Get("http://localhost:8080/user/me")

错误是:获取“http://localhost:8080/user/me”:拨打 tcp 127.0.0.1:8080: connect: 连接被拒绝:“ 这个api(http://localhost:8080/user/me)是在user_management应用程序中编写的,并且它正在工作,我与邮递员检查。 我已经阅读了这个问题的答案,但无法解决我的问题。 我是docker新手,请帮忙。


正确答案


要在多个 docker-compose 客户端之间进行通信,您需要确保要相互通信的容器位于同一网络上。

例如,(为简洁起见进行编辑)这里您有 docker-compose.yml 之一

# sport_app docker-compose.yml
version: '3'
services:
  go-sports-entities-hierarchy:
    ...
    networks:
      - some-net
  go-sports-events-workflow
    ...
    networks:
      - some-net
networks:
  some-net:
    driver: bridge

还有另一个 docker-compose.yml

# user_management app docker-compose.yml
version: '3'
services:
  postgres:
    ...
    networks:
      - some-net
  go-user-management
    ...
    networks:
      - some-net
networks:
  some-net:
    external: true

注意:您的应用程序的网络的名称基于 项目名称 ,该名称基于其所在目录的名称,在本例中添加了前缀 user_

然后他们可以使用服务名称相互通信,即 go-user-management 等。

您可以在运行 docker-compose up --build 命令后,运行 docker network ls 命令来查看它,然后运行 ​​docker network inspectionbridge 等。

要解决此错误 ( dial tcp [::1]:8080: 连接:连接被拒绝) 您需要做的就是编辑主机文件 sudo vi /etc/hosts 并删除任何不使用的 ip 并使用 localhost 设置新 ip。请参考图片:

到这里,我们也就讲完了《拨号127.0.0.1:8080时出现连接被拒绝的错误,需要查看码头应用程序》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>