跳到主要内容
版本号:Next

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 4 提供了一系列新的环境变量,以修改权限、端口或 HTTP 协议。 以下是完整列表:

属性默认值描述
VERDACCIO_APPDIR/opt/verdaccio-builddocker 工作目录
VERDACCIO_USER_NAMEverdaccio系统用户
VERDACCIO_USER_UID10001授予目录权限的 user id
VERDACCIO_PORT4873Verdaccio 端口
VERDACCIO_PROTOCOLhttp默认 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 相同的基本镜像来构建具有本机依赖项的插件。

FROM node:lts-alpine as builder
RUN mkdir -p /verdaccio/plugins \
&& cd /verdaccio/plugins \
&& npm install --global-style --no-bin-links --omit=optional verdaccio-auth-memory@latest
FROM verdaccio/verdaccio:6
ADD docker.yaml /verdaccio/conf/config.yaml
COPY --chown=$VERDACCIO_USER_UID:root --from=builder \
/verdaccio/plugins/node_modules/verdaccio-auth-memory \
/verdaccio/plugins/verdaccio-auth-memory

更多信息,请查看源代码中使用 Docker 的真实插件示例。

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镜像

docker build -t verdaccio .

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

yarn run build:docker

请注意: 第一次创建的镜像要花几分钟时间,因为它需要运行 npm install, 而且,如果您更改任何未在.dockerignore列表里的文件,它也将会运行相同的时间。

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

Docker示例

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

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

Docker 自定义创建

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