背景
- 拉取了jenkins的镜像,启动容器的时候端口就映射了8080,但这个演示环境要用到jenkins node,其中默认的代理端口是50000.漏了,就想着能否不重新弄一个容器,修改下配置或者命令行增加下port映射即可。
实践
- 当前端口
# 启动命令
docker run -id --name=sqjenkins -p 8083:8080 -v /var/jenkins_node:/var/jenkins_home --restart=always jenkins/jenkins
# 查看当前容器
[root@hecs-67651 var]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4a190f585202 jenkins/jenkins "/usr/bin/tini -- /u…" 2 hours ago Up About an hour 50000/tcp, 0.0.0.0:8083->8080/tcp, :::8083->8080/tcp sqjenkins
# 端口映射
[root@hecs-67651 var]# docker port 4a19
8080/tcp -> 0.0.0.0:8083
8080/tcp -> :::8083
- 获取容器完整的id
[root@hecs-67651 var]# docker inspect 4a19|grep Id
"Id": "4a190f5852024ebf6ba6bbd1dd18dca89203a203282d98b3f2885af486cc9a03",
- 在/var/lib/docker/containers下找到这个目录
cd /var/lib/docker/containers/4a190f5852024ebf6ba6bbd1dd18dca89203a203282d98b3f2885af486cc9a03
- 停止容器
[root@hecs-67651 ~]# docker stop 4a
4a
-
确认有个json文件
- 文件
[root@hecs-67651 4a190f5852024ebf6ba6bbd1dd18dca89203a203282d98b3f2885af486cc9a03]# ls -l
total 164
-rw-r----- 1 root root 126317 Aug 10 14:45 4a190f5852024ebf6ba6bbd1dd18dca89203a203282d98b3f2885af486cc9a03-json.log
drwx------ 2 root root 4096 Aug 10 12:29 checkpoints
-rw------- 1 root root 4107 Aug 10 14:44 config.v2.json
-rw-r--r-- 1 root root 1602 Aug 10 14:44 hostconfig.json
-rw-r--r-- 1 root root 13 Aug 10 14:44 hostname
-rw-r--r-- 1 root root 174 Aug 10 14:44 hosts
drwx--x--- 2 root root 4096 Aug 10 12:29 mounts
-rw-r--r-- 1 root root 143 Aug 10 14:44 resolv.conf
-rw-r--r-- 1 root root 71 Aug 10 14:44 resolv.conf.hash
- hostconfig.json 示例(已美化过)
{
"Binds": ["/var/jenkins_node:/var/jenkins_home"],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {
"8080/tcp": [{
"HostIp": "",
"HostPort": "8083"
}]
... 省略
}
- 最好备份下这2个json文件
- 修改前的内容
"PortBindings":{"8080/tcp":[{"HostIp":"","HostPort":"8083"}]}
- 修改后的内容
"PortBindings":{"50000/tcp":[{"HostIp":"","HostPort":"50000"}],"8080/tcp":[{"HostIp":"","HostPort":"8083"}]},
- config.v2.json 示例(已美化过),此处并不需要修改(看里面已经有)
{
"StreamConfig": {},
"State": {
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"RemovalInProgress": false,
"Dead": false,
"Pid": 0,
"ExitCode": 143,
"Error": "",
"StartedAt": "2022-08-10T04:52:46.192830223Z",
"FinishedAt": "2022-08-10T06:37:16.759288228Z",
"Health": null
},
"ID": "4a190f5852024ebf6ba6bbd1dd18dca89203a203282d98b3f2885af486cc9a03",
"Created": "2022-08-10T04:29:21.506586162Z",
"Managed": false,
"Path": "/usr/bin/tini",
"Args": ["--", "/usr/local/bin/jenkins.sh"],
"Config": {
"Hostname": "4a190f585202",
"Domainname": "",
"User": "jenkins",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": { //注意此处已经在容器中暴露了端口,所以无需增加
"50000/tcp": {},
"8080/tcp": {}
},
... 省略
}
- 修改完毕(容器是停止状态),你需要重启docker(如果你有其他的容器就比较麻烦),我试过重启容器,始终无效。
systemctl restart docker
- 再次查看端口映射发现已经增加了
[root@hecs-67651 ~]# docker port 4a
50000/tcp -> 0.0.0.0:50000
50000/tcp -> :::50000
8080/tcp -> 0.0.0.0:8083
8080/tcp -> :::8083
总结
- 要重启docker本身
- config.v2.json hostconfig.json两个文件的内容
- 修改的时候要注意格式