参考文章:https://blog.csdn.net/ambm29/article/details/96483086#commentBox
利用Pycharm
远程使用Docker
中的Python
环境一共分为4步:
- 准备拥有
Python
环境的Docker
- 给
Docker
安装ssh-server
并生成新的镜像 - 运行新镜像,对外开放
ssh
端口 -
Pycharm
连接Docker
中的解释器
一、准备拥有Python环境的Docker镜像
略。
二、给Docker
安装配置ssh-server
目的:为了能让Docker
能被ssh
命令远程连接。
- 运行
Docker
镜像创建一个新容器,并在容器中安装ssh-server
# 运行镜像创建一个新容器(python_env:3.2是自己制作的拥有Python环境的Docker)
sudo docker run -it --name python_env python_env:3.2
# 此时应该已经在容器中了,安装openssh-server
apt install update
apt install openssh-server -y
# 启动ssh服务
service ssh start # 输出[ok] Starting OpenBSD Secure Shell server: sshd.即为成功
# 查看ssh服务状态
service ssh status
- 配置
ssh
登录密码,此处密码设置为“1237894560
”,用户名默认为“root
”
# 终端输入以下命令
passwd
# Enter new UNIX password: 输入密码1237894560
# Retype new UNIX password:再次输入密码1237894560
# passwd: password update successfully 密码设置成功
- 修改
ssh
的配置文件
vim /etc/ssh/sshd_config
修改如下两个地方
......
PermitRootLogin yes
......
UsePAM no
......
-
创建用来挂载项目的文件夹
目的:可以省略,自定义一个用来挂载项目的目录,之后用
cd /home
mkdir PythonProject
-
提交为新的镜像
到此,Docker
容器中的ssh-server
就已经全部配置成功了,下面我们将该容器提交为新镜像,留在后面使用。
# 推出容器
exit
# 查看系统中所有的容器
sudo docker ps -a
# 将刚才的容器提交为新镜像(python_env为刚才的容器名,也可以写容器ID)
sudo docker commit -a "lifan" -m "add ssh, passwd=1237894560" python_env python_env_ssh:1
# 查看新生成的容器
sudo docker images
注意:在参考文章中,作者在第1步安装openssh-server
后将service ssh start
设置到了~/.bashrc
文件中,以此来达到容器启动,ssh
服务自启。
但是我之后用Pycharm远程连接的Docker
的时候遇到了如下图所示的问题,查了大量资料发现是~/.bashrc
文件中有输出信息导致的。
所以我这里就不将启动ssh
的命令写到~/.bashrc
了。
三、运行新镜像,挂载项目,对外开放端口
我之所以弄这个,都是因为领导非要用Docker
里的环境,又不懂还乱喷,简直快气死我了。
- 运行新镜像,启动新容器
sudo docker run -id --name python_env_ssh -p 7061:22 -p 5000:5000 -v /home/lifan/Python_SSH_Project:/home/Python_Project python_env_ssh:1
-
-id
:容器以交互模式,后台运行的方式运行 -
--name
:容器名 -
-p
:端口号映射,宿主机端口:容器端口,5000是给flask
用的,7061是给ssh
用的 -
-v
:目录映射,宿主机项目目录:容器项目目录
- 因为上面我,没有设置
ssh
的自启,所以现在需要进入到容器中,手动启动ssh
服务:
# 进入容器
sudo docker exec -it python_env_ssh /bin/bash
# 启动ssh服务
service ssh start
四、Pycharm远程连接Docker
- 新增一个
Python
解释器
- 选择
ssh
远程连接的解释器,并进行配置
如果连接成功回进入如下界面;
如果不成功检查容器是否启动,容器中的ssh
服务是否启动;
五、使用远程解释器运行本地程序
# -*- coding: utf8 -*-
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def index():
return "Hello Flask"
if __name__ == '__main__':
print(app.url_map)
app.run(host="0.0.0.0", port=5000, debug=True)
运行项目前,可以看看解释器对不对
浏览器中输入宿主机的IP,然后大功告成。
最后,就是如何让ssh
服务在启动容器的时候自启,有哪位大佬有时间可以个留言个博客链接,感谢。
参考文章比我抄的讲的细致多了,可以去看原文。