亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何獲取 AWS 憑證并訪問 Docker 上的 S3

如何獲取 AWS 憑證并訪問 Docker 上的 S3

Go
慕后森 2023-07-10 14:29:40
我正在設置 Docker 容器。在服務器端,文件上傳到S3。在我本地環境下上傳成功。但是在Docker環境下上傳失敗??蛻舳耍篟eact/axios服務器:Golang/杜松子酒數據庫:mysql源代碼: https: //github.com/jpskgc/articlearticle ├ client ├ api   └ docker-compose.yml這是 docker-compose.yml:version: '3'services:  api:    build:      dockerfile: Dockerfile.dev      context: ./api    volumes:      - ./api:/app    ports:      - 2345:2345    depends_on:      - db    tty: true    volumes:      - $HOME/.aws/credentials.properties:/home/api/.aws/credentials.properties這是訪問 S3 的服務器端代碼。api := router.Group("/api"){    api.POST("/post/image", func(c *gin.Context) {        var creds *credentials.Credentials        var err error        creds = credentials.NewSharedCredentials("", "default")        _, err = creds.Get()        if err != nil {            creds = credentials.NewCredentials(&ec2rolecreds.EC2RoleProvider{})            _, err = creds.Get()        }        cfg := aws.NewConfig().WithRegion("ap-northeast-1").WithCredentials(creds)        svc := s3.New(session.New(), cfg)        form, _ := c.MultipartForm()        files := form.File["images[]"]        var imageNames []ImageName        imageName := ImageName{}        for _, file := range files {            f, err := file.Open()            if err != nil {                log.Println(err)            }            defer f.Close()            size := file.Size            buffer := make([]byte, size)            f.Read(buffer)            fileBytes := bytes.NewReader(buffer)            fileType := http.DetectContentType(buffer)            path := "/media/" + file.Filename            params := &s3.PutObjectInput{                Bucket:        aws.String("article-s3-jpskgc"),                Key:           aws.String(path),                Body:          fileBytes,                ContentLength: aws.Int64(size),                ContentType:   aws.String(fileType),            }我希望圖像在服務器端上傳到 S3。
查看完整描述

3 回答

?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

我設置環境變量docker-compose.yml并在控制臺中設置值。


    environment:

      - AWS_ACCESS_KEY_ID

      - AWS_SECRET_ACCESS_KEY

$ export AWS_ACCESS_KEY_ID=$(aws --profile default configure get aws_access_key_id)

$ export AWS_SECRET_ACCESS_KEY=$(aws --profile default configure get aws_secret_access_key)

creds := credentials.NewStaticCredentials(os.Getenv("AWS_ACCESS_KEY_ID"), os.Getenv("AWS_SECRET_ACCESS_KEY"), "")



查看完整回答
反對 回復 2023-07-10
?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

您可以使用環境變量傳遞您的憑據,如下所示:


AWS_ACCESS_KEY_ID=xxx

AWS_SECRET_ACCESS_KEY=yyy

所以你的 docker-compose 看起來像:


version: '3'

services:

? api:

? ? build:

? ? ? dockerfile: Dockerfile.dev

? ? ? context: ./api

? ? volumes:

? ? ? - ./api:/app

? ? environment:

? ? ? AWS_ACCESS_KEY_ID: YOUR-ACCESS-KEY-ID

? ? ? AWS_SECRET_ACCESS_KEY: YOUR-SECRET-KEY

? ? ports:

? ? ? - 2345:2345

? ? depends_on:

? ? ? - db

? ? tty: true

您不應該在生產中執行此操作,而應該使用 IAM 配置文件,這既是為了簡單起見,避免到處都有大量密鑰,也是為了安全性,避免在日志或任何地方泄露密鑰,但它非常適合開發目的。

查看完整回答
反對 回復 2023-07-10
?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

我通過將主機 .aws 目錄掛載到 docker 容器 docker-compose.yml 來使 AWS SDK for Go V2 滿意:

    volumes:
      - $HOME/.aws/credentials:/.aws/credentials:ro

SDK 會在目錄.aws下查找目錄$HOME,因此您可能需要找出HOMEdocker 容器中的 env,然后進行相應更新。


查看完整回答
反對 回復 2023-07-10
  • 3 回答
  • 0 關注
  • 241 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號