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 关注
- 253 浏览
添加回答
举报