docker - Golang 应用程序的 Docker 卷
问题描述
我尝试从 Docker 以开发模式运行我的 Golang-app
Dockerfile
FROM golang
WORKDIR /usr/src/app
COPY . /usr/src/app
RUN go get -d -v .
RUN go build -o main .
CMD ["./main"]
码头工人-compose.yml
version: "3.3"
services:
database:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
ports:
- 6060:5432
api:
build: ./demoapp-api
volumes:
- ./demoapp-api:/usr/src/app
ports:
- 5000:5000
depends_on:
- database
文件结构如下所示:
当我开始构建时,我收到此错误(完整日志):
Recreating f97ae865ad6d_demoapp_api_1_6f198d4b1db4 ... error
ERROR: for f97ae865ad6d_demoapp_api_1_6f198d4b1db4 Cannot start service api: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"./main\": stat ./main: no such file or directory": unknown
ERROR: for api Cannot start service api: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"./main\": stat ./main:no such file or directory": unknown
ERROR: Encountered errors while bringing up the project.
容器文件里面./main
存在
MBP-Pavel:demoapp pavel$ docker run --rm -it 4ae6ff9cf413 sh
# pwd
/usr/src/app
# ls
Dockerfile main main.go
#
volumes
如果从服务中删除api
一切都很好,但我需要完全重建我的应用程序(下载依赖项)。我做错了什么?
解决方案
通过 docker-compose 运行容器时,您的demoapp-api
文件夹安装在/usr/src/app
容器内部的顶部,而您的 go 应用程序位于容器中的那个文件夹中。由于demoapp-api
不包含主二进制文件,docker 无法找到并执行它。
您需要.go
在您的文件夹中本地编译您的 main demoapi-app
,然后运行 docker-compose up。
推荐阅读
- python - 在 Python 3.4.3 中移动多个海龟来制作“土司情侣”?
- java - Post Request 适用于 curl 但不适用于使用 HttpsURLConnection 的 java
- text - quanteda 中的自定义词典
- swift - TextView 在 Swift 中处理大量字符
- clojure - clojure 中的函数查找
- php - 如何合并两个数组
- node.js - 获取 http://localhost:5000/错误 404(未找到)
- python - 如何解码 DER/PEM 格式的 IPFS 私钥和公钥?
- android - Dagger2 和架构组件 - Kotlin 编译器错误
- ios - Crashlytics,无法添加新应用程序