【发布时间】:2021-11-14 13:41:02
【问题描述】:
我很难让 docker 在 osx 上工作。我有以下 Dockerfile:
FROM node:10.17.0-alpine AS staging
CMD ["mkdir","/srv/app"]
WORKDIR /srv/app
COPY . .
RUN ["npm","install"]
FROM node:10.17.0-alpine AS builder
RUN ["mkdir", "/srv/app" ]
COPY --from=staging /srv/app/ /srv/app/
WORKDIR /srv/app
WORKDIR /srv/app
RUN ["npm","run-script","build-staging"]
FROM nginx:alpine
COPY --from=builder /srv/app/www/ /usr/share/nginx/html/
COPY nginx.conf /etc/nginx/nginx.conf
我这样称呼这个文件:docker build -f ./Dockerfile --no-cache -t <my-app>:staging .
在 Windows 中这可以完美运行,但我的团队混合使用了 Windows 和 OSX 计算机,并且 docker build 在我们所有的 OSX 计算机上都失败并出现此错误:
=> ERROR [stage-2 2/3] COPY --from=builder /srv/app/www/ /usr/share/nginx/html/
------
> [stage-2 2/3] COPY --from=builder /srv/app/www/ /usr/share/nginx/html/:
------
failed to compute cache key: "/srv/app/www" not found: not found
我遇到了一种可能的原因,我可以尝试将“* text=auto”添加到我的 .gitattributes 文件中,但即使在重新克隆我的 repo 之后,这也无法解决问题。
我的 Dockerfile 怎么可能在 Windows 而不是 OSX 上工作?
编辑:我应该补充一点,我有一个几乎相同的项目,具有相同的 Docker 文件,其 docker push 适用于所有 Windows 机器和所有 OSX 机器。
【问题讨论】:
-
这里不涉及 Git;很明显,问题在于
/srv/app/www那时不存在,但不清楚的是为什么不存在:WORKDIR据说内置了一个递归 mkdir。我不知道为什么您在FROM ... AS builder部分中有两个,而且它们在该部分in 中太远了,如果/srv不存在,一些错误应该会更快发生,但这将是我的猜测:/srv不存在,并且以某种方式与其余部分混淆。 -
@torek - 我还在学习使用 Docker,而且这个项目是从以前的开发人员那里继承的,他不再与我的公司合作,所以如果 Dockerfile 可以被清理,我不会感到惊讶少量。不过,我在两件事上挂了: - 我的 docker push 这个项目适用于所有 Windows 机器,但在所有 OSX 机器上都失败了。 - 我有一个几乎相同的项目,具有相同的 Docker 文件,其 docker push 适用于所有 Windows 机器和所有 OSX 机器。