在容器内和宿主机的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();