第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

訪(fǎng)問(wèn)托管在 Docker 容器中的 Go Api

訪(fǎng)問(wèn)托管在 Docker 容器中的 Go Api

Go
瀟瀟雨雨 2022-06-01 16:08:29
我創(chuàng)建了一個(gè)包含 api 的 Go 后端服務(wù)器。在本地運(yùn)行“運(yùn)行服務(wù)器”時(shí)一切正常。然而,我在 docker 中運(yùn)行它時(shí)確實(shí)遇到了問(wèn)題。所以我創(chuàng)建了一個(gè) Dockerfile 并在 networkmode 主機(jī)中運(yùn)行 linux 容器,但無(wú)法在瀏覽器中訪(fǎng)問(wèn) api。如果它工作正常,我應(yīng)該能夠看到來(lái)自http://localhost:8500/status的 json 響應(yīng)。所以我想我需要權(quán)限或添加標(biāo)志或更多與安裝相關(guān)的腳本。我一直在 docker 中測(cè)試不同的標(biāo)志和端口,但無(wú)法識(shí)別問(wèn)題。請(qǐng)參閱下面的代碼、dockerfile 和命令。注意:當(dāng)我在 Windows 上本地運(yùn)行程序時(shí),會(huì)彈出一個(gè)安全警告,也許這與問(wèn)題有關(guān)?我正在運(yùn)行 docker desktop community v 2.2.0.5 stable。接口代碼:import (    "log"    "net/http"    conf "server/conf"    "github.com/gorilla/mux"    "github.com/jinzhu/gorm"    _ "github.com/jinzhu/gorm/dialects/mysql")var db *gorm.DB// Middleware used to add correct permissions for all requestsfunc middleware(next http.Handler) http.Handler {    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {        w.Header().Set("Content-Type", "application/json")        w.Header().Set("Access-Control-Allow-Origin", "*")        w.Header().Set("Access-Control-Allow-Headers", "Content-Type")        next.ServeHTTP(w, r)    })}func StartApi(config conf.Config, _db *gorm.DB) {log.Println("Start Api")    db = _db    router := mux.NewRouter()    // Create     router.HandleFunc("/login", login).Methods("POST", "OPTIONS")    router.HandleFunc("/network", createNetwork).Methods("POST", "OPTIONS")    // Read     router.HandleFunc("/users/{networkName}", getUsers).Methods("GET", "OPTIONS")    router.HandleFunc("/streams/{networkName}", getStreams).Methods("GET", "OPTIONS")    router.HandleFunc("/status", showStatus).Methods("GET", "OPTIONS")    log.Println("API started at port " + config.Backend.Api_port) // api port is stored in config    log.Println(http.ListenAndServe(":"+config.Backend.Api_port, middleware(router)))    log.Println("Api done!")  }Dockerfile:# Start from the latest golang base imageFROM golang:latestWORKDIR /go/src/serverCOPY ./src/server .# Download packagesRUN go get . # Compile code#RUN go build -o serverRUN go install server# Expose portsEXPOSE 8500EXPOSE 8600#ENTRYPOINT ./serverCMD ["go", "run", "server"]
查看完整描述

1 回答

?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊

所以我現(xiàn)在通過(guò)以下方式解決了它:

如此處所述: https ://docs.docker.com/compose/networking/

添加到 docker-compose:

networks:
  default:
    external:
      name: database_default

我可以在后端以 < db_container_name >:3306 的形式連接到數(shù)據(jù)庫(kù)。


為了自動(dòng)化這個(gè)過(guò)程,我創(chuàng)建了一個(gè) .sh 腳本來(lái)處理容器啟動(dòng)時(shí)的額外設(shè)置配置步驟。但是,由于我在 config.yml 中的結(jié)構(gòu),僅使用“sed”命令很難更新,因此我創(chuàng)建了一個(gè) python 程序來(lái)更新所有配置數(shù)據(jù)。Dockerfile、docker-compose 文件、setup.sh 和 update_config.py 文件如下所示。


設(shè)置.sh:


#!/bin/bash

# Don't remove this!

# This file is used by dockerfile to replace configs


# Replace config on run

python3 update_config.py


# Start program

go run server

Dockerfile:


# Start from the latest golang base image

FROM golang:latest


WORKDIR /go/src/server


COPY ./src/server .


# Install python3 and yml compability

RUN apt-get update && apt-get install -y python3-pip

RUN python3 --version

RUN pip3 install PyYAML


# Download packages

RUN go get . 


# Compile code

#RUN go build -o server

RUN go install server


# Expose ports

EXPOSE 8500

EXPOSE 8600


# ENV

 ENV DB_HOST "mysql:3306"


#CHMOD setup

RUN chmod +x setup.sh


CMD ["./setup.sh"]

碼頭工人組成


version : '3'


services:

  react:

    build: ./ReactFrontend/

    container_name: ReactFrontend

    tty: true

    ports:

    - 4000:3000


  backend:

    build: ./GoBackend/

    container_name: GoBackend

    environment:

      DB_HOST: mysql:3306 # Name or IP of DB container!

    ports:

    - 8500:8500

    - 8600:8600


networks:

  default:

    external:

      name: database_default

更新配置.py:


import yaml

import os


"""

DONT REMOVE

This file is used in the dockerfile!

"""


fname = "/go/src/server/config.yml"


stream = open(fname, 'r')

data = yaml.safe_load(stream)

stream.close()


# Add more updates here!

if os.environ.get('DB_HOST') is not None:

    data["database"]["ip"] = os.environ['DB_HOST']



# Updated data print

print("Updated Data", data)


# Write changes to config

stream = open(fname, 'w')

yaml.dump(data, stream)

stream.close()

如果我們只希望容器運(yùn)行,現(xiàn)在可以使用的示例 docker 命令:


docker run -p 8500:8500 -p 8600:8600 --net database_default goserver

它工作正常!我們正在避免使用不必要的主機(jī)網(wǎng)絡(luò)模式!


查看完整回答
反對(duì) 回復(fù) 2022-06-01
  • 1 回答
  • 0 關(guān)注
  • 168 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)