gpt4 book ai didi

go - 尝试运行 docker-compose up -d 时出现错误

转载 作者:行者123 更新时间:2023-12-05 03:19:09 25 4
gpt4 key购买 nike

我刚刚开始使用 Golang,正在尝试使用 docker-compose 构建 go gin。这是我的 Dockerfile

FROM golang:1.18

WORKDIR /docker-go

# pre-copy/cache go.mod for pre-downloading dependencies and only redownloading them in subsequent builds if they change
# COPY all file go ./

COPY ./app/main.go ./
COPY . /docker-go
# To initialize a project with go module, create go.mod

RUN go mod init shipping-go

# Add missing and/or remove unused modules
RUN go mod tidy

# This will bring all the vendors to your projects /vendor directory so that
# you don't need to get the modules again if working from another machine on this project.
RUN go mod vendor

RUN go mod download && go mod verify

COPY . .
RUN go build -v -o /docker-go/app .

RUN chmod +x /docker-go
USER root

和我的 docker-compose

version: "3.7"
services:
go-web:
build:
context: ./
dockerfile: Dockerfile
restart: 'no'
working_dir: /docker-go
ports:
- "8080:8080"
entrypoint: ["./start.sh"]
volumes:
- ./:/docker-go

当我用命令检查日志容器时出现错误

docker logs learn-docker-go_go-web_1

/docker-go
go: cannot find main module, but found .git/config in /docker-go
to create a module there, run:
go mod init
/docker-go

它似乎找不到模块文件,但我已经安装在 Dockerfile 中。对于详细信息,我将代码推送到我的存储库中 https://github.com/duyanh1904/learn-docker-go

最佳答案

您的 Dockerfiledocker-compose.yml 存在多个问题,我无法复制您看到的问题(但您的设置不适用于我也是)。我看到的一些问题是:

  • 复制。/docker-go 会将当前文件夹(包括子文件夹)复制到位于 /docker-go/ 的镜像中。这将生成文件夹 /docker-go/app。此文件夹的存在意味着 go build -v -o/docker-go/app . 会将可执行文件存储为 /docker-go/app/shipping-go(你正在尝试执行一个文件夹)。
  • 您的意图是让可执行文件位于 /docker-go 中,但您随后使用挂载 (./:/docker-go) 隐藏了该文件夹。根据 the docs “如果您绑定(bind)挂载到容器上的非空目录,则该目录的现有内容将被绑定(bind)挂载遮盖。”。
  • 您的 start.sh(未在问题中显示)未启动可执行文件(请参阅 the docs)。
  • main.go(问题中也没有显示)替换router.Run("127.0.0.1:8080")router.Run( “:8080”)。在 127.0.0.1 上监听意味着只接受本地连接;在容器内,这意味着仅来自容器本身的连接。

这是一个可以帮助您前进的有效设置(这可能不是最佳设置,但应该提供一个起点,使您能够进一步试验)。请注意,您需要先在 main.go 中进行上述更改。

Dockerfile

FROM golang:1.18

WORKDIR /docker-go

# Note: A better solution would be to copy an existing go.mod into the image
RUN go mod init shipping-go
COPY ./app/main.go ./
# Determine required modules and download them
RUN go mod tidy
RUN go build -v -o /docker-go/app
RUN chmod +x /docker-go/app

docker-compose.yml

version: "3.7"
services:
go-web:
build:
dockerfile: Dockerfile
restart: 'no'
ports:
- "8080:8080"
command: ["./app"]

关于go - 尝试运行 docker-compose up -d 时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73520510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com