首页 > 解决方案 > 供应商/数据库在 Docker 映像中找不到包

问题描述

我正在 GO 中编写一个简单的应用程序并使用 postges 我有这个文件夹结构

  |--- Dockerfile 
  |--- api.go 
  |--- vendor/ 
         database/
            init.go

这是我的 dockerfile

FROM golang:1.9

ARG app_env
ENV APP_ENV $app_env

COPY . .
WORKDIR /project

RUN go get ./vendor/database

RUN go get ./
RUN go build

CMD if [ ${APP_ENV} = production ]; \
    then \
    api; \
    else \
    api; \
    fi

EXPOSE 8080

当我工作 docker-compose up 时,我收到此错误:

错误信息

Step 6/10 : RUN go get ./vendor/database
 ---> Running in 459740ba584c
can't load package: package ./vendor/database: cannot find package "./vendor/database" in:
        /project/vendor/database
Service 'api' failed to build: The command '/bin/sh -c go get ./vendor/database' returned a non-zero code: 1

我的项目结构哪里出了问题?

标签: dockerdocker-composedockerfile

解决方案


您正在使用命令将源复制到基本映像的默认目录COPY . .。然后,您将/project使用WORKDIR /project. 所以当你运行时RUN go get ./vendor/database,实际运行的命令是在/project/vendor/database其中不存在的。切换COPY和WORKDIR的顺序如下

WORKDIR /project
COPY . .

推荐阅读