ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ## docker的远程访问 方法一 :编辑docker.service文件 ***** 编辑docker.service文件 ``` sudo vim /lib/systemd/system/docker.service ``` 修改ExecStart行为下面内容 ``` ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock ``` 重新加载docker配置 ``` sudo systemctl daemon-reload // 1,加载docker守护线程 sudo systemctl restart docker // 2,重启docker ``` ` ` 方法二:修改`daemon.json`的配置 ***** 下面修改`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 ``` ` ` 方法三 ***** 首先是怎么配置远程访问的API: ``` vim /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。 ` ` ## 通过IDEA和CA证书加密远程链接到服务器上的Docker 因为docker 默认是root 权限,允许所有人访问,直接把2375端口暴露在外网相当于直接把服务器的root 权限拱手送人,因此我们需要构建一个加密的TCP链接,以Https的方式连接到远程的docker 服务器 ### 创建ca证书 创建一个ca文件夹: ``` sudo mkdir -p /usr/local/ca cd /usr/local/ca ``` 创建一个key ``` sudo openssl genrsa -aes256 -out ca-key.pem 4096 sudo openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem ``` >提示你需要输入密码和确认密码,请记住这个密码 填写一些基本的信息,国家啊,地区 生成server-key.pem ``` sudo openssl genrsa -out server-key.pem 4096 ``` 绑定IP或者域名 $HOST 这个值,填写你的服务器外网IP 或者服务器外网域名 ``` sudo openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr ``` 配置白名单 ``` sudo vim extfile.cnf ``` $HOST 是上一步设置的那个 $HOST,加入下列内容: ``` subjectAltName = DNS:106.54.84.33,IP:106.54.84.33,IP:127.0.0.1,IP:0.0.0.0 extendedKeyUsage = serverAuth ``` >你如果希望只有指定的IP能够访问的话,请把0.0.0.0 改为指定IP,不过一般情况下,个人的网络是没有固定的公网IP的,所以建议设置成0.0.0.0,但是需要证书才能访问 生成ca-key ``` sudo openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf ``` >执行这一句需要输入之前设置的密码 创建客户端密钥和证书签名请求: ``` sudo openssl genrsa -out key.pem 4096 sudo openssl req -subj '/CN=client' -new -key key.pem -out client.csr ``` 修改 `extfile.cnf` ``` subjectAltName = DNS:106.54.84.33,IP:106.54.84.33,IP:127.0.0.1,IP:0.0.0.0 extendedKeyUsage = clientAuth ``` 生成签名私钥: ``` sudo openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf ``` >需要输入之前设置的密码 修改权限 ``` sudo chmod -v 0400 ca-key.pem key.pem server-key.pem sudo chmod -v 0444 ca.pem server-cert.pem cert.pem ``` 现在`client.csr`和`server.csr`两个文件可以删除了。 ### docker配置ca证书 把证书复制过去 ``` sudo cp server-*.pem /etc/docker/ sudo cp ca.pem /etc/docker/ ``` 将Docker服务停止了,然后: 修改docker 的配置 ``` sudo vi /lib/systemd/system/docker.service ``` 把ExecStart 的值设置为如下 ``` --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2375-H unix:///var/run/docker.sock ``` 启动Docker守护进程,并将其挂载在2375端口。 重启docker ``` sudo systemctl daemon-reload sudo systemctl restart docker ``` ### 使用证书连接 复制`ca.pem`,`cert.pem`,`key.pem`三个文件到客户端 执行命令连接: ``` docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=192.168.211.238:2375 version ``` ### 默认连接 如果想默认连接该Docker服务器,可以进行如下配置: 将`ca.pem`,`cert.pem`,`key.pem`三个文件移动到 ~/.docker 设置环境变量: ``` export DOCKER_HOST=tcp://$HOST:2375 DOCKER_TLS_VERIFY=1 ``` 执行`docker xxx`即默认连接Docker服务器进行操作。 ### 通过IDEA 的docker 插件进行连接 * 默认是tcp 的,你要改成https,端口你之前设置的什么端口就是什么端口,第十二步 * 选择你放证书的那个文件夹 ### 连接到远程docker 成功连接,连接不上的,查找如下原因 1、tcp连接没换 2、端口不对 3、服务器防火墙没放端口 4、云服务器防火墙没放端口 5、证书没弄好 ### 证书配置错误 ``` Can't load /home/ubuntu/.rnd into RNG 139826195939776:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/home/ubuntu/.rnd ``` 解决办法 进入.rnd所在目录 ``` cd /home/ubuntu/ sudo openssl rand -writerand .rnd ```