利用Pycharm远程使用Docker中的Python环境一共分为4步

  1. 准备拥有Python环境的Docker
  2. Docker安装ssh-server并生成新的镜像
  3. 运行新镜像,对外开放ssh端口
  4. Pycharm连接Docker中的解释器

一、准备拥有Python环境的Docker镜像

略。

二、给Docker安装配置ssh-server

目的:为了能让Docker能被ssh命令远程连接。

  1. 运行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
  1. 配置ssh登录密码,此处密码设置为“1237894560”,用户名默认为“root
# 终端输入以下命令
passwd
# Enter new UNIX password: 输入密码1237894560
# Retype new UNIX password:再次输入密码1237894560
# passwd: password update successfully 密码设置成功
  1. 修改ssh的配置文件
vim /etc/ssh/sshd_config

修改如下两个地方

......
PermitRootLogin yes
......
UsePAM no
......
  1. 创建用来挂载项目的文件夹
    目的:可以省略,自定义一个用来挂载项目的目录,之后用
cd /home
mkdir PythonProject
  1. 提交为新的镜像
    到此,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了。

使用Pycharm调用Docker中的Python解释器_pycharm


使用Pycharm调用Docker中的Python解释器_Docker_02

三、运行新镜像,挂载项目,对外开放端口

我之所以弄这个,都是因为领导非要用Docker里的环境,…,简直快气死我了。

  1. 运行新镜像,启动新容器
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:目录映射,宿主机项目目录:容器项目目录
  1. 因为上面我,没有设置ssh的自启,所以现在需要进入到容器中,手动启动ssh服务:
# 进入容器
sudo docker exec -it python_env_ssh /bin/bash

# 启动ssh服务
service ssh start

四、Pycharm远程连接Docker

  1. 新增一个Python解释器
  2. 选择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)

运行项目前,可以看看解释器对不对

使用Pycharm调用Docker中的Python解释器_Docker_03


浏览器中输入宿主机的IP,然后大功告成。

使用Pycharm调用Docker中的Python解释器_pycharm_04

最后,就是如何让ssh服务在启动容器的时候自启,有哪位大佬有时间可以个留言个博客链接,感谢。

参考文章比我抄的讲的细致多了,可以去看原文。