无需 cf/ice CLI 即可部署到 IBM Containers

Deploy to IBM Containers without cf/ice CLI

我目前的工作流程是这样的:Bitbucket -> Wercker。

Wercker 正确构建了我的应用程序,但在部署时我迷路了。我正在尝试部署到我在 Bluemix 上的 IBM Containers 注册中心(最近结束了测试版)。 运行 docker login registry.ng.bluemix.net 使用我的 IBM 帐户凭据 returns 401:本地计算机上的凭据错误(OSX 上的 boot2docker)。它在我的部署步骤中对 Wercker 执行相同的操作。 这是我的部署步骤:

deploy:
  box:
    id: node
    tag: 0.12.6-slim
  steps:
    - internal/docker-push:
            username: $USERNAME
            password: $PASSWORD
            tag: main
            entrypoint: node bundle/main.js
            repository: <my namespace/<my container name> (removed for this post)
            registry: registry.ng.bluemix.net

如您所见:我已根据 Wercker Docs 将用户名和密码作为环境变量传入(并且我已测试它们是否正确传入)。

基本上:如何在不使用 ice/cf CLI 的情况下将容器推送到 IBM 注册表?我有一种感觉,我错过了一些明显的东西。我就是找不到。

您需要使用Containers plugin for cf 或ICE 工具登录。

Documentation

Cloud Foundry 插件: cf ic login 冰: ice login

你能创建一个可以先登录的自定义脚本吗?如果环境已经有 cf 容器扩展:

- script:
    name: Custom login for Bluemix Containers
    code: cf login -u <username> -p <password> -o <org> -s <space>

对不起我的笨蛋新人。

问题是注册表的身份验证使用令牌而不是您的用户 ID 和密码。 ice logincf ic login 会解决这个问题,但不幸的是,直接向上 docker login 是行不通的。

此处还提供了一些用于初始化、构建和清理图像的脚本:https://github.com/Osthanes/docker_builder。这些用于 DevOps 服务交付管道,这可能与您正在构建的流程类似。

Turns out: it's very possible.

基本上:

  • 安装 CF cli
  • cf login -a https://api.ng.bluemix.net
  • 从 ~/.cf/config.json 中提取令牌(AccessToken 中承载后的文本 +“|”+ OrganizationFields.Guid

这取决于你想用它做什么。我这里有一篇非常详细的文章 on Github。 您可以使用令牌作为密码,将 'bearer' 作为用户名传递。

@mods:这足以让我 link 到另一个站点吗?我真的很讨厌复制这样的东西...

您现在可以使用 bx 命令的 container-registry 插件生成访问 IBM Bluemix Container Registry 的令牌。

这些令牌可以是 read-onlyread-write 并且不会过期(除非被撤销)或在 24 小时后过期。

令牌可以直接与docker login一起使用。

阅读文档here