跳到主要内容
版本号:5.x

Docker

拉取最新的预构建 docker 镜像:

docker pull verdaccio/verdaccio

Docker pull

标记版本

alt Docker Pulls Count

自版本v2.x开始,您可以通过标签来下载(pull)docker镜像,具体操作如下:

对于主版本:

docker pull verdaccio/verdaccio:4

对于次版本:

docker pull verdaccio/verdaccio:4.0

对于特定(补丁)版本:

docker pull verdaccio/verdaccio:4.0.0

如果您对标签列表感兴趣, 请访问 Docker 网站枢纽

使用 Docker 运行 Verdaccio

要运行docker 容器:

docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio

最后一个参数定义使用哪个镜像。 如果本地没有 Verdaccio 镜像,上述代码会从 dockerhub 拉取最新的预构建镜像。

如果您已经用 verdaccio作为最后参数在本地创建一个镜像

你也可以使用 -v 来绑定挂载 conf, storageplugins 在主机的位置(示例如下)。

请注意,如果您像这样挂载conf,则您首先需要在该目录中提供config.yaml 的副本。 如果缺少此文件,Docker 容器将无法正常启动。

你可以从 https://github.com/verdaccio/verdaccio/blob/5.x/conf/docker.yaml 复制这份文件。

但是,请注意该文件中的安全警告;你肯定会想在生产环境中锁定它。

V_PATH=/path/for/verdaccio; docker run -it --rm --name verdaccio \
-p 4873:4873 \
-v $V_PATH/conf:/verdaccio/conf \
-v $V_PATH/storage:/verdaccio/storage \
-v $V_PATH/plugins:/verdaccio/plugins \
verdaccio/verdaccio

如果您在服务器中运行,可能需要添加 -d 以便在后台运行它

Note: Verdaccio 在容器中是在一个非root用户(uid=10001) 下运行的,如果您使用绑定挂载(bind mount)去覆盖了默认值,那么你需要确保挂载的目录分配给正确的用户。 在上面的示例里,您要运行 sudo chown -R 10001:65533 /opt/verdaccio,否则在运行的时候您会得到权限错误提醒。 推荐使用docker卷(volume)来替代绑定安装。

环境变量

Verdaccio 提供了一组新的环境变量来修改权限、端口或 http 协议,请在环境变量页面查看它们。

SELinux

如果系统中执行了 SELinux,则需要重新标记容器中绑定挂载的目录。 否则 verdaccio 将被禁止读取这些文件。

 fatal--- cannot open config file /verdaccio/conf/config.yaml: Error: CONFIG: it does not look like a valid config file

如果 verdaccio 无法读取绑定挂载目录下的文件,而您又无法确定,请检查 /var/log/audit/audit.log 以确认是否是 SELinux 问题。 在本例中,上述错误产生了以下 AVC 拒绝。

type=AVC msg=audit(1606833420.789:9331): avc:  denied  { read } for  pid=1251782 comm="node" name="config.yaml" dev="dm-2" ino=8178250 scontext=system_u:system_r:container_t:s0:c32,c258 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0

chcon 可以更改共享文件和目录的标签。 要使容器可以访问目录,请将目录类型更改为 container_file_t

$ chcon -Rt container_file_t ./conf

如果只想让特定容器访问目录,请使用 chcat 指定匹配的 SELinux 类别。

另一种解决方案是使用 z 和 Z 参数。 要将 z 参数添加到挂载点 ./conf:/verdaccio/conf 只需将其更改为 ./conf:/verdaccio/conf:zz 参数重新标记为目录,并在 z 参数将目录的目录重新标记时,使其可通过每个容器访问,并使其仅适用于该特定容器。 然而,使用这些标记是非常危险的。 一个非常小的配置错误,例如挂载 /home/user 或者 /var 会弄乱这些目录上的标签,并使得系统无法启动。

插件

插件可以安装在单独的目录中,并使用 Docker 或 Kubernetes 进行挂载,但请确保使用与 Verdaccio Dockerfile 相同的基本镜像来构建具有本机依赖项的插件。

verdaccio/verdaccio:tag 为基础创建自己的 Dockerfile

如果插件已存在于某个注册表中,则可以使用 npm 命令全局安装它。

FROM verdaccio/verdaccio:5
ADD docker.yaml /verdaccio/conf/config.yaml
USER root
RUN npm install --global verdaccio-static-token \
&& npm install --global verdaccio-auth-memory
USER $VERDACCIO_USER_UID

有关更详细的插件示例,请查看 docker-examples 文件夹

使用本地插件添加插件到 Dockerfile

如果注册表中没有可用的软件包,而您又想试用本地插件,可以使用 /verdaccio/plugins 文件夹,verdaccio 会在启动时从该文件夹中查找插件。

  1. 创建具有多阶段支持的基础映像。
  2. ADD 本地插件到镜像中
  3. 安装依赖项,如果您的插件有依赖项,则需要安装依赖项,如果您需要转译步骤(tsc、babel),则可能需要构建。
  4. 将最终文件夹复制到最终映像中,并应用权限,以便 verdaccio 可以找到这些文件夹(verdaccio 使用自定义用户 $VERDACCIO_USER_UID,详情请阅读这里)。
FROM node:lts-alpine as builder
RUN mkdir -p /verdaccio/plugins
ADD plugins/verdaccio-docker-memory /verdaccio/plugins/verdaccio-docker-memory
RUN cd /verdaccio/plugins/verdaccio-docker-memory \
&& npm install --production
FROM verdaccio/verdaccio:5
ADD docker.yaml /verdaccio/conf/config.yaml
COPY --chown=$VERDACCIO_USER_UID:root --from=builder \
/verdaccio/plugins/verdaccio-docker-memory \
/verdaccio/plugins/verdaccio-docker-memory

有关更详细的插件示例,请查看 docker-examples 文件夹

添加插件而不创建新镜像

  1. 使用 docker-compose.yaml 下面的示例
  2. 在 docker 中映射卷时,verdaccio 默认会在 /verdaccio/plugins 查找插件。
V_PATH=/path/for/verdaccio; docker run -it --rm --name verdaccio \
-p 4873:4873 \
-v $V_PATH/conf:/verdaccio/conf \
-v $V_PATH/storage:/verdaccio/storage \
-v $V_PATH/plugins:/verdaccio/plugins \
verdaccio/verdaccio

Docker和自定义端口配置

在使用docker 的时候,当前任何在 listen 下的 conf/config.yaml 里配置的 host:port 都将被忽略。

如果你想通过其它端口访问 Verdaccio Docker 实例,例如 5000 端口,在你的 docker run 命令中添加环境变量 VERDACCIO_PORT=5000,并通过 -p 5000:5000 开放端口。

V_PATH=/path/for/verdaccio; docker run -it --rm --name verdaccio \
-e "VERDACCIO_PORT=8080" -p 8080:8080 \
verdaccio/verdaccio

当然,你提供的 -p 参数需要匹配环境变量中的数字

在Docker中使用HTTPS

您可以配置Verdaccio要监听的协议,就像端口配置一样 您在config.yaml中指定证书后,您需要将PROTOCOL环境变量的默认的值("http")覆盖为"https"。

docker run -it --rm --name verdaccio \
--env "VERDACCIO_PROTOCOL=https" -p 4873:4873
verdaccio/verdaccio

使用docker-compose

  1. 获取docker-compose的最新版本。
  2. 创建并运行容器:
$ docker-compose up --build

您可以通过在上面的命令前加上VERDACCIO_PORT=5000来设置要使用(包括容器和主机两者)的端口

version: '3.1'

services:
verdaccio:
image: verdaccio/verdaccio
container_name: 'verdaccio'
networks:
- node-network
environment:
- VERDACCIO_PORT=4873
ports:
- '4873:4873'
volumes:
- './storage:/verdaccio/storage'
- './config:/verdaccio/conf'
- './plugins:/verdaccio/plugins'
networks:
node-network:
driver: bridge

Docker 将生成一个用于存储持续应用程序数据的命名卷(named volume)。 你可以使用 docker inspect 或者 docker volume inspect 来查看此卷(volume)的物理位置并编辑配置,比如:

$ docker volume inspect verdaccio_verdaccio
[
{
"Name": "verdaccio_verdaccio",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/verdaccio_verdaccio/_data",
"Labels": null,
"Scope": "local"
}
]

创建您自己的Docker镜像

转到5.x分支并运行:

docker build -t verdaccio .

还有一个创建 docker 镜像的 yarn 脚本,因此您还可以执行以下操作:

yarn run build:docker

注意:第一次构建需要几分钟的时间,因为它需要运行 yarn install,如果你修改了.dockerignore 中没有列出的文件,就会再次耗费这么长的时间。

请注意,您需要在您的机器上安装 docker 来执行以上任何docker命令, docker 可执行程序应该在您的$PATH里。

Docker示例

有一个单独的存储库,它托管多个配置,以使用 verdaccio 组成 Docker 映像,例如作为反向代理:

https://github.com/verdaccio/docker-examples

Docker 自定义创建

如果您根据 Verdaccio 制作了镜像,请随时将其添加到此列表中。