一、Docker开启Remote API访问2375端口

1.Docker常见端口

2375:未加密的docker socket,远程root无密码访问主机
2376:tls加密套接字,很可能这是您的CI服务器4243端口作为https 443端口的修改
2377:群集模式套接字,适用于群集管理器,不适用于docker客户端
5000:docker注册服务
4789和7946:覆盖网络

2.开启方法一

配置远程访问的API:

vi /etc/default/docker

加入下面一行

DOCKER_OPTS="-H tcp://0.0.0.0:2375"

重启docker即可:

sudo systemctl restart docker

PS:这是网上给的配置方法,也是这种简单配置让Docker Daemon把服务暴露在tcp的2375端口上,这样就可以在网络上操作Docker了。Docker本身没有身份认证的功能,只要网络上能访问到服务端口,就可以操作Docker。

 然而我并没有这个文件

3.开启方法二

在/usr/lib/systemd/system/docker.service,配置远程访问。

主要是在[Service]这个部分,加上下面两个参数

# vi /usr/lib/systemd/system/docker.service
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

重启

systemctl daemon-reload
systemctl restart docker

查看docker进程:

[root@slaver2 ~]# ps -ef|grep docker
root      44221      1  1 18:16 ?        00:00:06 /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

Docker守护进程打开一个HTTP Socket,这样才能实现远程通信

4.开启方法三

下面修改daemon.json的配置

vim /etc/docker/daemon.json

{
  "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}

"unix:///var/run/docker.sock":unix socket,本地客户端将通过这个来连接 Docker Daemon。
"tcp://0.0.0.0:2375":tcp socket,表示允许任何远程客户端通过 2375 端口连接 Docker Daemon。

修改配置以后

然后让docker重新读取配置文件,并重启docker服务

systemctl daemon-reload
systemctl restart docker

然而我没有daemon.json文件,自己新增了文件后加入了上面说的东西后,docker无法启动了 

5.成功后试一下连接远程docker

-H为连接目标主机docker服务

查看docker版本

[root@slaver2 /]# docker -H tcp://IP:2375 version
Client: Docker Engine - Community
 Version:           19.03.0
 API version:       1.40
 Go version:        go1.12.5
 Git commit:        aeac9490dc
 Built:             Wed Jul 17 18:15:40 2019
 OS/Arch:           linux/amd64
 Experimental:      false
Cannot connect to the Docker daemon at tcp://IP:2375. Is the docker daemon running?

二、idea使用Docker插件实现远程连接

 1.idea安装docker插件

安装好后重启idea

2.idea配置docker插件

 

3.创建Dockerfile

 先创建一个简单的springboot项目,带有测试使用的controller

然后在pom.xml那一级目录中创建dockerfile

dockerfile内容

# Docker image for springboot application
# VERSION 0.0.1
# Author: bolingcavalry

### 基础镜像
#FROM centos:7
#
#RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel vorbis-tools
#
#COPY target/service2-1.0-SNAPSHOT.jar /service2-1.0.jar
#
#EXPOSE 8080
#
#CMD ["/bin/bash","-c","java -jar /service2-1.0.jar"]

## 基础镜像,使用alpine操作系统,openjkd使用8u201
FROM openjdk:8u201-jdk-alpine3.9

#作者
MAINTAINER sid

#系统编码
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8

#声明一个挂载点,容器内此路径会对应宿主机的某个文件夹
VOLUME /tmp

#应用构建成功后的jar文件被复制到镜像内,名字也改成了app.jar
ADD target/service2-1.0-SNAPSHOT.jar service2-1.0.jar

#启动容器时的进程
ENTRYPOINT ["java","-jar","/service2-1.0.jar"]

#暴露8080端口
EXPOSE 8080

4.配置启动远程Build镜像切运行容器

启动(在此之前确保远程docker启动了)

请求

 去这个IP对应的机器上 docker ps一下

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐