我有一个基于节点的项目,以下是作为构建的一部分需要执行的前几个步骤:
<ion-content>
<ion-slides>
<ion-slide>
<ion-content padding>
<ion-refresher (ionRefresh)="doRefresh($event)">
<ion-refresher-content
pullingIcon="ios-refresh"
pullingText="Pull to refresh"
refreshingSpinner="ios"
refreshingText="Loading...">
</ion-refresher-content>
</ion-refresher>
<!--put long text-->
</ion-content>
</ion-slide>
<ion-slide>
<ion-content padding>
<ion-refresher (ionRefresh)="doRefresh($event)">
<ion-refresher-content
pullingIcon="ios-refresh"
pullingText="Pull to refresh"
refreshingSpinner="ios"
refreshingText="Loading...">
</ion-refresher-content>
</ion-refresher>
<!--put long text-->
</ion-content>
</ion-slide>
<ion-slide>
<ion-content padding>
<ion-refresher (ionRefresh)="doRefresh($event)">
<ion-refresher-content
pullingIcon="ios-refresh"
pullingText="Pull to refresh"
refreshingSpinner="ios"
refreshingText="Loading...">
</ion-refresher-content>
</ion-refresher>
<!--put long text-->
</ion-content>
</ion-slide>
</ion-slides>
</ion-content>
上面的最后一个命令构建了以下Dockerfile:
npm install
npm run build
docker build -t client .
FROM docker.artifactory.abc.net/nginx
COPY build /usr/share/nginx/html
COPY default.conf /etc/nginx/conf.d/default.conf
的内容:
.gitlab-ci.yml
在上面的Dockerfile中,我正在使用一个自定义节点映像(image: docker.artifactory.abc.net/docker/node:1.0
stages:
- build
- deploy
build:
stage: build
script:
- npm install
- npm run build
- docker build -t client .
),其中包含node:1.0
的代理设置以及Artifactory配置,因此所有依赖项都是使用Artifactory获取的。现在,当我运行此构建时,我在执行最后一个命令(apk
)时出现docker: command not found
错误,这是预期的,因为基本图像是docker build -t client .
并且不是{0}}包含node
。所以我在基于this链接的节点Dockerfile中添加了docker setup指令,除了它配置ENTRYPOINT和CMD的最后3行。
现在,当我运行构建时,我得到了:
docker
根据我过去的经验,这个错误与运行$ docker build -t client .
Sending build context to Docker daemon 372.7MB
Step 1 : FROM docker.artifactory.abc.net/nginx
Get https://docker.artifactory.abc.net/v2/nginx/manifests/latest: unknown: Authentication is required
ERROR: Job failed: exit code 1
命令有关。由于official image中的泊坞窗设置使用了tar,因此我必须将docker login
用户添加到docker
,然后将当前用户(root)添加到/etc/group
组。还将如下所示的docker
命令添加到Dockerfile:
docker login
之后,如果我尝试构建此Dockerfile,我会收到以下错误:
addgroup docker; \
adduser root docker; \
docker login docker.artifactory.abc.net -u svc-art -p "ZTg6#&kq"; \
我也做了一个+ dockerd -v
Docker version 17.05.0-ce, build v17.05.0-ce
+ docker -v
Docker version 17.05.0-ce, build v17.05.0-ce
+ adduser root docker
+ tail -2 /etc/group
node:x:1000:node
docker:x:101:root
+ docker login docker.artifactory.abc.net -u svc-art -p ZTg6#&kq
Warning: failed to get default registry endpoint from daemon (Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?). Using system default: https://index.docker.io/v1/
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
,并且里面没有 图片中的docker套接字文件。这似乎是个问题。
知道如何让这个工作吗?
答案 0 :(得分:1)
从你提供的示例中我看不到你在哪里调用你的docker服务,因此我假设你没有调用它,你也没有登录注册表。
管道的外观如下所示:
image: docker.artifactory.abc.net/docker/node:1.0
stages:
- build
- deploy
build:
image: docker:latest
services:
- docker:dind
stage: build
script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.example.com
- docker build -t registry.example.com/group/project/image:latest .
- docker push registry.example.com/group/project/image:latest
您还可以找到更多信息here