我正在尝试从Dockerfile构建Docker镜像。该图像基于最新的node:alpine图像。它在它上面安装了Ruby和一些宝石。这是Dockerfile:
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)
我用Google搜索了SSL错误,大多数解决方案建议安装一些SSL证书。但是,在我的情况下,基本Docker镜像是相同的。只有Docker主机操作系统不同。如果问题是SSL证书,那么捆绑器总是会在第一个宝石上失败,而不是每次都是随机的。所以我的猜测是Docker在Windows上运行时出现了问题,但我的想法已经用完了。有什么帮助吗?
PS:我已经确保所有机器都有相同的节点快照:alpine恰好是这样的:$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
node alpine 37434f668ea8 30 hours ago 55.3 MB
我尝试使用较旧的Docker Toolbox构建快速启动映像,该工具箱使用VirtualBox而不是Hyper-V。它再次失败,每次都在不同的宝石上,但错误现在不同了:
Gem::RemoteFetcher::FetchError: Errno::ECONNRESET: Connection reset by peer - SSL_connect (https://rubygems.org/gems/minitest-5.10.1.gem)
但仍然是SSL错误。