开放docker端口https://github.com/docker-java/docker-java
操作步骤:
-
docker安装
-
进入docker.service
cd /lib/systemd/system/ vim docker.service
-
修改docker.service
找到Execstart=/usr/bin/dockerd 不管其之后是什么在这句话的最后加上
注意:是加上,不修改原有的内容,只是增添
-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
保存:wq
-
重启docker服务
systemctl daemon-reload//重新加载docker服务的配置文件 service docker restart//重启启动docker systemctl stats docker//可以查看相关内容,看看2375是否已经设置好 netstat -nlp |grep 2375//可以查看2375是否已经被监听
-
开放防火墙2375端口
#查看防火墙端口信息 firewall-cmd --list-ports #开放端口 firewall-cmd --zone=public --add-port=2375/tcp -permanent --zone #作用域 --add-port=80/tcp #添加端口,格式为:端口/通讯协议 --permanent #永久生效,没有此参数重启后失效 #重启防火墙 service firewalld restart
6.在浏览器中输入 服务器IP:2375/info,获得json数据,检查是否开启成功
docker-java集成使用直接开放0.0.0.0端口存在一定被入侵风险, 容易被恶意脚本袭击(亲测)
解决方案:自制安全认证证书 有待学习
Dependencies:
```xml``` com.github.docker-java docker-java3.2.12
Service:
package com.jay.docker.service;
import com.alibaba.fastjson.JSONObject;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.model.ExposedPort;
import com.github.dockerjava.api.model.Info;
import com.github.dockerjava.api.model.Ports;
import com.github.dockerjava.core.DockerClientBuilder;
import static com.github.dockerjava.api.model.HostConfig.newHostConfig;
public class DockerClientService {
public DockerClient connectDocker(){
DockerClient dockerClient = DockerClientBuilder.getInstance("tcp://xxxx:2375").build();
Info info = dockerClient.infoCmd().exec();
String infoStr = JSONObject.toJSONString(info);
System.out.println("docker的环境信息如下:=================");
System.out.println(info);
return dockerClient;
}
public CreateContainerResponse createContainers(DockerClient client,String containerName,String imageName){
//映射端口8088—>80
ExposedPort tcp80 = ExposedPort.tcp(80);
Ports portBindings = new Ports();
portBindings.bind(tcp80, Ports.Binding.bindPort(8088));
CreateContainerResponse container = client.createContainerCmd(imageName)
.withName(containerName)
.withHostConfig(newHostConfig().withPortBindings(portBindings))
.withExposedPorts(tcp80).exec();
return container;
}
public void startContainer(DockerClient client,String containerId){
client.startContainerCmd(containerId).exec();
}
public void removeContainer(DockerClient client,String containerId){
client.removeContainerCmd(containerId).exec();
}
}
docker-java详解
Dependencies
-
com.github.docker-java:docker-java-core 用于 DockerClient连接
-
one of com.github.docker-java:docker-java-transport-* 与 Docker 守护进程通信
- 您将需要一个 DockerClientConfig 实例来告诉库如何访问 Docker,使用哪些凭据从 Docker 注册表中提取
- 构建器可用,并允许您配置客户端的每个属性
DockerClientConfig standard = DefaultDockerClientConfig.createDefaultConfigBuilder().build();
DockerClientConfig custom = DefaultDockerClientConfig.createDefaultConfigBuilder()
//Docker 主机 URL
.withDockerHost("tcp://docker.somewhere.tld:2376")
//启用/禁用 TLS 验证(在 http 和 https 协议之间切换)
.withDockerTlsVerify(true)
//TLS 验证所需证书的路径
.withDockerCertPath("/home/user/.docker")
//您的注册表用户名(推送容器所需)
.withRegistryUsername(registryUser)
//您的注册表密码
.withRegistryPassword(registryPass)
//您的注册邮箱
.withRegistryEmail(registryMail)
//您的注册地址
.withRegistryUrl(registryUrl)
.build();
//DOCKER_ConFIG 其他 docker 配置文件的路径(如 .dockercfg)
//api.version API 版本,例如1.23
-
三种配置方式
- Properties (docker-java.properties)
- System Properties:
- System Environment
参考:
- docker-java
- 开放端口
- api



