使用 docker-compose 运行 Go 应用失败并退出, 但使用 docker run 命令可以正常工作
我正在一个运行 Ubuntu 16.04.5 x64 的远程服务器上进行所有操作。
我的 Go 项目的 Dockerfile 如下:
FROM golang:latest
ADD . $GOPATH/src/example.com/myapp
WORKDIR $GOPATH/src/example.com/myapp
RUN go build
#EXPOSE 80
#ENTRYPOINT $GOPATH/src/example.com/myapp/myapp
ENTRYPOINT ./myapp
#CMD ["./myapp"]
当我使用 docker-compose up -d 运行 docker 容器时,Go 应用程序会退出,我在 docker 日志中看到了这个:
myapp_1 | /bin/sh: 1: ./myapp: Exec format error docker_myapp_1 退出,代码为 2
如果我使用 docker images 定位到镜像并像下面这样运行镜像:
docker run -it 75d4a95ef5ec
我可以看到我的 Golang 应用程序可以正常运行:
viper environment is: development HTTP server listening on address: ":3005"
当我搜索这个错误时,有些人建议使用一些特殊的标志进行编译,但是我在相同的 Ubuntu 主机上运行此容器,所以我真的很困惑为什么这不能在 docker 中正常工作。
我的 docker-compose.yml 如下:
version: "3"
services:
openresty:
build: ./openresty
ports:
- "80:80"
- "443:443"
depends_on:
- myapp
env_file:
- '.env'
restart: always
myapp:
build: ../myapp
volumes:
- /home/deploy/apps/myapp:/go/src/example.com/myapp
ports:
- "3005:3005"
depends_on:
- db
- redis
- memcached
env_file:
- '.env'
redis:
image: redis:alpine
ports:
- "6379:6379"
volumes:
- "/home/deploy/v/redis:/data"
restart: always
memcached:
image: memcached
ports:
- "11211:11211"
restart: always
db:
image: postgres:9.4
volumes:
- "/home/deploy/v/pgdata:/var/lib/postgresql/data"
restart: always
你的 docker-compose.yml 文件如下:
volumes:
- /home/deploy/apps/myapp:/go/src/example.com/myapp
这意味着你的主机系统的源目录被挂载,覆盖了 Dockerfile 构建的所有内容。./myapp 是主机上的 myapp 可执行文件的副本,如果有什么不同之处(也许你的主机是 MacOS 或 Windows),这会导致错误。
这是一种流行的设置,适用于那些想要运行应用程序而不运行正常测试-构建-部署过程的解释性语言的开发人员,但对于像 Go 这样的编译语言来说,这并不是很有意义。我建议删除这个块。
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

这是 Go 容器因为以下原因停止运行:
WORKDIR $GOPATH/src/example.com/myapp RUN go build #EXPOSE 80 #ENTRYPOINT $GOPATH/src/example.com/myapp/myapp ENTRYPOINT ./myapp你切换到
$GOPATH/src/example.com/myapp目录下构建你的应用,然而你的入口点指向了错误的位置。为了解决这个问题,你可以将应用程序复制到根目录,并保持相同的 ENTRYPOINT 命令,或者将应用程序复制到不同的位置并传递完整路径,例如:
ENTRYPOINT /my/go/app/location