1 回答
TA贡献1777条经验 获得超10个赞
您有多个问题,Dockerfile我docker-compose.yml无法复制您所看到的问题(但您的设置对我也不起作用)。我看到的一些问题是:
COPY . /docker-go会将当前文件夹(包括子文件夹)复制到图像中/docker-go/。这将产生一个文件夹/docker-go/app。该文件夹的存在意味着go build -v -o /docker-go/app .将可执行文件存储为/docker-go/app/shipping-go(您正在尝试执行文件夹)。您的意图是让可执行文件位于其中,
/docker-go但您随后使用挂载 (./:/docker-go) 隐藏了该文件夹。根据文档“如果您绑定挂载到容器上的非空目录中,该目录的现有内容将被绑定挂载遮盖。”。您的
start.sh(问题中未显示)没有启动可执行文件(请参阅文档)。在
main.go(问题中也未显示)替换router.Run("127.0.0.1:8080")为router.Run(":8080"). 监听127.0.0.1意味着只接受本地连接;在容器内,这意味着仅来自容器本身的连接。
这是一个可以让你继续前进的工作设置(这可能不是最佳的,但应该提供一个起点,使你能够进一步试验)。请注意,您需要先进行上述更改main.go。
文件
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"]
- 1 回答
- 0 关注
- 379 浏览
添加回答
举报
