Docker学习笔记:Docker安装nexus3.x搭建Maven私服

安装步骤

  1. 查找镜像
docker search nexus

结果如下:

NAME                                         DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
sonatype/nexus3                              Sonatype Nexus Repository Manager 3             787
sonatype/nexus                               Sonatype Nexus                                  432                                     [OK]
clearent/nexus                                                                               22
sonatype/nexus-iq-server                     Sonatype Nexus IQ Server                        15
bradbeck/nexus-https                         Dockerized version of Nexus Repo Manager 3 w…   13                                      [OK]
baselibrary/nexus                            ThoughtWorks Docker Image: nexus                7                                       [OK]
cavemandaveman/nexus                         Sonatype Nexus container                        6                                       [OK]
frekele/nexus                                docker run --rm --name nexus -p 8081:8081 fr…   4                                       [OK]
shifudao/nexus3                              clone from nexus3 image but based from openj…   4                                       [OK]
fabric8/nexus                                                                                3                                       [OK]
openshiftdemos/nexus                         Sonatype Nexus with JBoss Enterprise reposit…   2
fxinnovation/nexus3                          Sonatype Nexus 3 in a container                 1                                       [OK]
cloud4t0r/nexus                              lastest nexus image optimized for ECS/AWS       1
nexusstats/nexus-stats                                                                       1
fjudith/nexus                                Dockerized Nexus Repository Manager based on…   0                                       [OK]
cityofsurrey/nexus                                                                           0
ocadotechnology/nexus-data-pipeline-backup   Backup Nexus3 with AWS Data Pipeline and EFS…   0                                       [OK]
lokkju/nexus3-github-auth                    Sonatype Nexus 3 with Github authentication …   0                                       [OK]
zbkio/nexus-noroot                           Nexus for Openshift                             0
grundt/nexus-arm32v7                         For nexus docker image with arm32v7 CPU         0
ocadotechnology/nexus-configurator           see: https://github.com/ocadotechnology/nexu…   0
jenkinsxio/nexus                                                                             0
trialgrid/nexus-docker                       Nexus docker image                              0
rorellanac/nexusfrontend                     Repositorio nexus                               0
nexus166/gobld                               https://github.com/nexus166/gobld               0

2.拉取 nexus3 镜像

docker pull sonatype/nexus3
  1. 查看拉取下来的镜像
docker images

结果如下:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
sonatype/nexus3     latest              640570fd0ff5        11 days ago         642MB
  1. 启动 nexus3 容器

启动命令:

docker run -d --name nexus3_yuanx \
           --restart=always \
           -p 8081:8081 \
           -p 8082:8082  \
           -p 8083:8083  \
           -p 8084:8084  \
           -p 8085:8085   \
           -v /home/docker/nexus/data:/nexus-data \
           sonatype/nexus3

命令参数说明

docker run                                   ## 容器启动命令
-d                                           ## 后台启动
--name nexus3_yuanx                          ## 容器命名
-p 8081:8081                                 ## 宿主机映射端口:容器端口
--restart=always                             ## 容器重启策略
-v /home/docker/nexus/data:/nexus-data       ## 容器数据卷挂载 宿主器绝对路径:容器绝对路径
sonatype/nexus3                              ## 指定容器启动所用镜像

端口映射说明:

nexus3 启动的时候指定了多个端口映射,其中8081是nexus服务访问端口,8082~8084是仓库端口。

  1. 查看运行中容器
docker ps

结果如下:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
7d80862c0962        sonatype/nexus3     "sh -c ${SONATYPE_DI…"   5 hours ago         Up 5 hours          0.0.0.0:8081-8085->8081-8085/tcp   nexus3_yuanx

查看容器 STATUS属性,如上所示说明容器已正常启动。

nexus3启动异常处理

Unable to create directory /nexus-data/instance异常处理

  1. 查看启动日志
docker logs nexus3_yuanx

结果如下:

Warning:  Cannot open log file: ../sonatype-work/nexus3/log/jvm.log
Warning:  Forcing option -XX:LogFile=/tmp/jvm.log
java.io.FileNotFoundException: ../sonatype-work/nexus3/tmp/i4j_ZTDnGON8hezynsMX2ZCYAVDtQog=.lock (No such file or directory)
        at java.io.RandomAccessFile.open0(Native Method)
        at java.io.RandomAccessFile.open(RandomAccessFile.java:316)
        at java.io.RandomAccessFile.(RandomAccessFile.java:243)
        at com.install4j.runtime.launcher.util.SingleInstance.check(SingleInstance.java:72)
        at com.install4j.runtime.launcher.util.SingleInstance.checkForCurrentLauncher(SingleInstance.java:31)
        at com.install4j.runtime.launcher.UnixLauncher.checkSingleInstance(UnixLauncher.java:88)
        at com.install4j.runtime.launcher.UnixLauncher.main(UnixLauncher.java:67)
java.io.FileNotFoundException: /nexus-data/karaf.pid (Permission denied)
        at java.io.FileOutputStream.open0(Native Method)
        at java.io.FileOutputStream.open(FileOutputStream.java:270)
        at java.io.FileOutputStream.(FileOutputStream.java:213)
        at java.io.FileOutputStream.(FileOutputStream.java:101)
        at org.apache.karaf.main.InstanceHelper.writePid(InstanceHelper.java:126)
        at org.apache.karaf.main.Main.launch(Main.java:243)
        at org.sonatype.nexus.karaf.NexusMain.launch(NexusMain.java:113)
        at org.sonatype.nexus.karaf.NexusMain.main(NexusMain.java:52)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:85)
        at com.install4j.runtime.launcher.UnixLauncher.main(UnixLauncher.java:69)
java.lang.RuntimeException: /nexus-data/log/karaf.log (No such file or directory)
        at org.apache.karaf.main.util.BootstrapLogManager.getDefaultHandlerInternal(BootstrapLogManager.java:102)
        at org.apache.karaf.main.util.BootstrapLogManager.getDefaultHandlersInternal(BootstrapLogManager.java:137)
        at org.apache.karaf.main.util.BootstrapLogManager.getDefaultHandlers(BootstrapLogManager.java:70)
        at org.apache.karaf.main.util.BootstrapLogManager.configureLogger(BootstrapLogManager.java:75)
        at org.apache.karaf.main.Main.launch(Main.java:244)
        at org.sonatype.nexus.karaf.NexusMain.launch(NexusMain.java:113)
        at org.sonatype.nexus.karaf.NexusMain.main(NexusMain.java:52)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:85)
        at com.install4j.runtime.launcher.UnixLauncher.main(UnixLauncher.java:69)
Caused by: java.io.FileNotFoundException: /nexus-data/log/karaf.log (No such file or directory)
        at java.io.FileOutputStream.open0(Native Method)
        at java.io.FileOutputStream.open(FileOutputStream.java:270)
        at java.io.FileOutputStream.(FileOutputStream.java:213)
        at org.apache.karaf.main.util.BootstrapLogManager$SimpleFileHandler.open(BootstrapLogManager.java:193)
        at org.apache.karaf.main.util.BootstrapLogManager$SimpleFileHandler.(BootstrapLogManager.java:182)
        at org.apache.karaf.main.util.BootstrapLogManager.getDefaultHandlerInternal(BootstrapLogManager.java:100)
        ... 12 more
Error creating bundle cache.
Unable to update instance pid: Unable to create directory /nexus-data/instances
mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission denied
mkdir: cannot create directory '../sonatype-work/nexus3/tmp': Permission denied
OpenJDK 64-Bit Server VM warning: Cannot open file ../sonatype-work/nexus3/log/jvm.log due to No such file or directory

Warning:  Cannot open log file: ../sonatype-work/nexus3/log/jvm.log
Warning:  Forcing option -XX:LogFile=/tmp/jvm.log
java.io.FileNotFoundException: ../sonatype-work/nexus3/tmp/i4j_ZTDnGON8hezynsMX2ZCYAVDtQog=.lock (No such file or directory)
        at java.io.RandomAccessFile.open0(Native Method)
        at java.io.RandomAccessFile.open(RandomAccessFile.java:316)
        at java.io.RandomAccessFile.(RandomAccessFile.java:243)
        at com.install4j.runtime.launcher.util.SingleInstance.check(SingleInstance.java:72)
        at com.install4j.runtime.launcher.util.SingleInstance.checkForCurrentLauncher(SingleInstance.java:31)
        at com.install4j.runtime.launcher.UnixLauncher.checkSingleInstance(UnixLauncher.java:88)
        at com.install4j.runtime.launcher.UnixLauncher.main(UnixLauncher.java:67)
java.io.FileNotFoundException: /nexus-data/karaf.pid (Permission denied)
        at java.io.FileOutputStream.open0(Native Method)
        at java.io.FileOutputStream.open(FileOutputStream.java:270)
        at java.io.FileOutputStream.(FileOutputStream.java:213)
        at java.io.FileOutputStream.(FileOutputStream.java:101)
        at org.apache.karaf.main.InstanceHelper.writePid(InstanceHelper.java:126)
        at org.apache.karaf.main.Main.launch(Main.java:243)
        at org.sonatype.nexus.karaf.NexusMain.launch(NexusMain.java:113)
        at org.sonatype.nexus.karaf.NexusMain.main(NexusMain.java:52)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:85)
        at com.install4j.runtime.launcher.UnixLauncher.main(UnixLauncher.java:69)
java.lang.RuntimeException: /nexus-data/log/karaf.log (No such file or directory)
        at org.apache.karaf.main.util.BootstrapLogManager.getDefaultHandlerInternal(BootstrapLogManager.java:102)
        at org.apache.karaf.main.util.BootstrapLogManager.getDefaultHandlersInternal(BootstrapLogManager.java:137)
        at org.apache.karaf.main.util.BootstrapLogManager.getDefaultHandlers(BootstrapLogManager.java:70)
        at org.apache.karaf.main.util.BootstrapLogManager.configureLogger(BootstrapLogManager.java:75)
        at org.apache.karaf.main.Main.launch(Main.java:244)
        at org.sonatype.nexus.karaf.NexusMain.launch(NexusMain.java:113)
        at org.sonatype.nexus.karaf.NexusMain.main(NexusMain.java:52)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:85)
        at com.install4j.runtime.launcher.UnixLauncher.main(UnixLauncher.java:69)
Caused by: java.io.FileNotFoundException: /nexus-data/log/karaf.log (No such file or directory)
        at java.io.FileOutputStream.open0(Native Method)
        at java.io.FileOutputStream.open(FileOutputStream.java:270)
        at java.io.FileOutputStream.(FileOutputStream.java:213)
        at org.apache.karaf.main.util.BootstrapLogManager$SimpleFileHandler.open(BootstrapLogManager.java:193)
        at org.apache.karaf.main.util.BootstrapLogManager$SimpleFileHandler.(BootstrapLogManager.java:182)
        at org.apache.karaf.main.util.BootstrapLogManager.getDefaultHandlerInternal(BootstrapLogManager.java:100)
        ... 12 more
Error creating bundle cache.
Unable to update instance pid: Unable to create directory /nexus-data/instances
  1. 问题原因

启动nexus时,为容器挂在了数据卷 -v /home/docker/nexus/data:/nexus-data,但是并没有对数据卷目录进行授权,容器没有权限操作宿主机文件夹。

  1. 解决方案

修改宿主机 /home/docker/nexus/data 文件夹权限,这里先授予所有权限。

chmod 777 /home/docker/nexus/data/

之后再重启容器

docker restart 64f5edfbc768

nexus3访问

  1. 访问信息

访问地址:http://宿主机IP:8081
默认账号:admin
默认密码:admin123 或者 /var/lib/admin.apssword

  1. 登录nexus3

Docker 方式运行 Nexus3 登陆密码不为 admin123,使用默认账号密码登录直接报错:
Docker学习笔记:Docker安装nexus3.x搭建Maven私服_第1张图片
其实登录时候在登录框已经有提示:

Your admin user password is located in /nexus-data/admin.password on the server.`
  1. 获取登录密码

进入容器

docker exec -it 容器id /bin/bash

命令参数说明

-it:这是2个参数
-i:保持标准输入打开,默认为 false
-t:分配一个伪终端,默认为 false 

输出密码

cat /nexus-data/admin.password

结果如下:

bash-4.4$ cat /nexus-data/admin.password
2a333e85-37eb-4bf6-beab-a3977464dd4cbash-4.4$

注意:密码为2a333e85-37eb-4bf6-beab-a3977464dd4c,后面的bash-4.4$不是密码内容。

退出容器

exit
  1. 用获取到的密码登录nexus并修改密码

扩展学习:Nexus私服添加用户名密码凭据访问的配置方法

你可能感兴趣的:(Docker,学习笔记,Linux,学习笔记,系统集成)