在容器内和宿主机的Docker交互
需要配置:
DockerClientBuilder.getInstance("tcp://localhost:2375").build();
其中 windows 适合使用 TCP 连接,这需要提前打开 Docker Egine 的端口暴露。
而在Linux/MAC中,可以使用 unix 套接字来实现:
"unix:///var/run/docker.sock"
并且在 docker-compose 中设置服务的Volume:
volumes:
- //var/run/docker.sock:/var/run/docker.sock
这里就是要多一个 /,说是可以支持windows连接,但我测试并不能,不过 unix 还是可以 Bind to docker socket on Windows - Stack Overflow
由于 Docker 中是 Unix 环境,需要使用后者的方法,而在本机测试环境下运行又是 windows 环境,故做个条件判断来根据情况选用不同的连接方式:
DockerClientBuilder.getInstance(System.getProperty("os.name").toLowerCase().contains("win") ? "tcp://localhost:2375" : "unix:///var/run/docker.sock").build();