docker - 供应商/数据库在 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
我的项目结构哪里出了问题?
解决方案
您正在使用命令将源复制到基本映像的默认目录COPY . .
。然后,您将/project
使用WORKDIR /project
. 所以当你运行时RUN go get ./vendor/database
,实际运行的命令是在/project/vendor/database
其中不存在的。切换COPY和WORKDIR的顺序如下
WORKDIR /project
COPY . .
推荐阅读
- javascript - onLine API 在任何浏览器中都不起作用
- regex - 正则表达式匹配最后一次匹配后的第一个单词 /
- silverlight - 使用 Silverlight 和异步加载进行打印
- java - 如果日志格式有多个空格,则 logger.info 的输出带有问号 (?)
- amazon-web-services - AWS API 网关 websocket 问题
- .net-core - SwaggerUI 的 .NetCore API 版本问题
- php - wordpress 中的多参数搜索
- angular - 如何在不添加任何其他验证器的情况下添加异步验证?
- java - for-each 循环如何工作?
- javascript - 有没有更好的方法来对 2 个数组进行逐元素操作