gem 在 Docker 上为 Windows 构建映像时安装失败

gem install fails when building an image on Docker for Windows

我正在尝试从 Docker 文件构建 Docker 图像。该图像基于最新的 node:alpine 图像。它安装了 Ruby 和一些 gem 。这是 Docker 文件:

FROM node:alpine
ENV BUNDLE_SILENCE_ROOT_WARNING=1 BUNDLE_APP_CONFIG=/usr/local/bundle \
  BUNDLE_BIN=/usr/local/bundle/bin BUNDLE_PATH=/usr/local/bundle
RUN apk add ruby ruby-io-console ruby-bundler ca-certificates \
  build-base ruby-dev ruby-json libffi-dev \
  python zlib-dev --no-cache && \
  update-ca-certificates

WORKDIR /opt/middleman
COPY Gemfile* ./
RUN bundle install --clean
COPY package.json ./
RUN npm install

我可以在 Linux 和 MacOS 上构建映像,但在 Windows 上,打包程序随机失败,每次都在不同的 gem 上,并显示以下消息:

Gem::RemoteFetcher::FetchError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A (https://rubygems.org/gems/rack-2.0.1.gem)

我用谷歌搜索了 SSL 错误,大多数解决方案都建议安装一些 SSL 证书。但是,在我的例子中,基础 Docker 图像是相同的。只有 Docker 主机 OS 不同。如果问题出在 SSL 证书上,捆绑程序总是会在第一个 gem 上失败,而不是每次都是随机的。所以我的猜测是 Docker 运行 在 Windows 上出现问题,但我有 运行 的想法。有帮助吗?

PS:我确保所有机器都有相同的 node:alpine 快照,恰好是这样的:

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
node                alpine              37434f668ea8        30 hours ago        55.3 MB

更新:

  1. 我也尝试构建 quick-start Rails image 但失败了。
  2. 我尝试使用较旧的 Docker 工具箱构建快速启动映像,该工具箱使用 VirtualBox 而不是 Hyper-V。再次失败,每次都在不同的gem,但错误现在不同了:

    Gem::RemoteFetcher::FetchError: Errno::ECONNRESET: Connection reset by peer - SSL_connect (https://rubygems.org/gems/minitest-5.10.1.gem)
    

不过仍然是 SSL 错误。

感谢您的所有评论。我终于找到了罪魁祸首。这是我的 Killer Wireless 网卡的 "feature"...为了将来参考,我不得不在 "Killer Network Manager" 应用程序中禁用 "Advanced Stream Detect"。这是屏幕截图:

他们应该称之为 SSL 杀手。