首页 > 解决方案 > 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一切都很好,但我需要完全重建我的应用程序(下载依赖项)。我做错了什么?

标签: dockerdocker-compose

解决方案


通过 docker-compose 运行容器时,您的demoapp-api文件夹安装在/usr/src/app容器内部的顶部,而您的 go 应用程序位于容器中的那个文件夹中。由于demoapp-api不包含主二进制文件,docker 无法找到并执行它。

您需要.go在您的文件夹中本地编译您的 main demoapi-app,然后运行 ​​docker-compose up。


推荐阅读