gpt4 book ai didi

ruby-on-rails - 私有(private) gem 没有安装在 docker 中

转载 作者:数据小太阳 更新时间:2023-10-29 07:08:26 25 4
gpt4 key购买 nike

我正在尝试使用 docker 运行一个 Rails 应用程序。通过 github 的 ssh url 安装的 gem 很少,如下所示:

Gemfile

gem 'swagger-docs', :git => 'git@github.com:xyz/swagger-docs.git', :branch => 'my_branch'

我在 docker 中添加了 keys,它能够克隆所需的 repo 并从 git 安装 gem。

Dockerfile

RUN mkdir -p /root/.ssh
COPY ./id_rsa /root/.ssh/id_rsa

RUN chmod 700 /root/.ssh/id_rsa

RUN ssh-keygen -f /root/.ssh/id_rsa -y > /root/.ssh/id_rsa.pub

RUN ssh-keyscan github.com >> /root/.ssh/known_hosts

当我构建它(包括 bundle install)时,一切顺利,图像成功构建。但是当我运行 docker-compose up 时,它给出了以下错误

/usr/local/bundle/gems/bundler-1.9.2/lib/bundler/source/git/git_proxy.rb:155:in `allowed_in_path': The git source git@github.com:xyz/swagger-docs.git is not yet checked out. Please run `bundle install` before trying to start your application (Bundler::GitError)

最佳答案

您是否尝试过使用 docker 实验性功能?他们有适合 using ssh to access private data in builds 的东西这让我可以在我的 docker 构建中使用我托管在 Github 上的私有(private) gem。要启用它,您需要做以下 4 件事:

1. 使用 git 标签将私有(private) gem 添加到你的 Gemfile 中:
gem 'rack', git: 'https://github.com/rack/rack'
2. 将 DOCKER_BUILDKIT 环境变量设置为 1,并在调用构建命令时启用默认的 ssh 标志:
$ DOCKER_BUILDKIT=1 docker build --ssh default .
3. 将 docker 文件的第一行设置为以下注释:
# syntax=docker/dockerfile:experimental
4. 使用 --mount=type=ssh 标志在 Docker 文件中执行 ssh 设置以添加 ssh key 并在安装 gem 时使用 ssh key :
# Make ssh dir and download public key for github.com to add it to known_hosts
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

# Add your ssh key, update bundler, and use bundler to install all your gems
RUN --mount=type=ssh ssh-add -L && gem install bundler && bundle install

将 --mount=type=ssh 与 docker 实验性功能结合使用可让 docker 负责对您的 ssh-key-information 保密。这在过去一直是对 docker 的提示,而且使用实验性功能似乎是目前将您的 ssh 私钥传递到我遇到的构建的最安全和最简单的方法。

总的来说,你应该有这样的东西作为你的 Dockerfile:(个人示例)

# syntax=docker/dockerfile:experimental
FROM ruby:3.0.0

WORKDIR /usr/src/app

COPY Gemfile Gemfile.lock /usr/src/app/

# Make ssh dir and download public key for github.com to add it to known_hosts
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts

# Add your ssh key, update bundler, and use bundler to install all your gems
RUN --mount=type=ssh ssh-add -L && gem install bundler && bundle install

COPY . .

EXPOSE 8080

CMD ["bundle", "exec", "rackup", "-o", "0.0.0.0", "-p", "8080"]

关于ruby-on-rails - 私有(private) gem 没有安装在 docker 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36885316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com