如何在Docker配置文件中指定Docker私有注册表凭据?

时间:2017-11-16 16:58:05

标签: node.js docker docker-registry

我正在创建nodejs应用程序的Docker容器。以下是我的Docker配置文件

的示例
FROM node:6.11
WORKDIR /usr/src/app
COPY package.json .
npm install
copy . /usr/src/app
EXPOSE 80
CMD [ "npm", "start" ]

这将从Docker hub下载节点映像,然后根据配置创建Docker镜像。

出于安全考虑,我不想从Docker中心下载nodejs映像,而是希望使用我的私有存储库来下载nodejs映像。

由于我已经设置了私有存储库,因此我不确定如何在DockerFile中指定注册表凭据。

任何人都可以帮我吗?

3 个答案:

答案 0 :(得分:2)

在构建Docker镜像之前,您必须对私人仓库进行docker login。然后拉 - 显式或隐式通过FROM将使用该注册表(虽然我找不到任何文档来支持它,但我怀疑如果它找不到那里的图像,它也会回退到Docker Hub,但是这可能取决于注册表设置????)

答案 1 :(得分:1)

默认情况下,docker从Dockerhub中提取所有图像。如果要从另一个注册表中提取图像,则必须在图像名称前加上注册表URL。查看official docker pull documentation

在您的情况下,您有两个选择:

第一种是在Dockerfile中明确指定注册表:

FROM <registry>:<port>/node:6.11
WORKDIR /usr/src/app

构建完成后,图像将从私有注册表下载。在使用docker login命令构建之前,请确保您已登录到注册表。

或者,如果您不想更改docker文件。使用docker pull <registry>:<port>/node:6.11从私有注册表中提取图像,然后通过仅使用node:6.11

标记它来强制使用此图像来使用此图像
docker tag <registry>:<port>/node:6.11 node:6.11

答案 2 :(得分:0)

我猜你已经在本地docker注册表中拥有了nodejs镜像。 如果要从本地docker注册表中提取nodejs映像:

  • 确保您的docker守护程序指向本地docker注册表使用--insecure-registry <registry_address>:<port>,如此处所述QML Specifics
  • 将Dockerfile更改为指向注册表中的图像。 FROM <registry_address>:<port>/node:6.11(实际上这将是本地docker注册表中nodejs图像的完整名称)
  • 可以使用docker login命令https://docs.docker.com/engine/reference/commandline/dockerd/设置注册表凭据,也可以在~/.docker/config.json文件中手动设置凭据。
  • 现在您可以构建图像,它应该从注册表中提取基本图像。