VS code远程连接linux服务器中docker里的python
环境
linux:centos 7
python:3.10
vs code: 1.63
1.建目录
首先,创建目录 python,用于存放后面的相关东西。
#在根目录下创建python/app文件夹
mkdir -p ~/python ~/python/myapp
myapp 目录将映射为 python 容器配置的应用目录。
进入创建的 python 目录,创建 Dockerfile。
2.创建python3容器
方法一:
docker run -d --name mypython -p 8022:22 -v /automl:/workspace/automl -it python:latest /bin/bash
- -p 8022:22 把docker的端口22映射到服务器的8022端口,这样之后通过 ssh root@ -p 8022就能访问到docker了
- -d 容器后台运行,避免退出容器后容器自动关闭;
- -v 挂载和同步目录,这样服务器和docker内就有一个文件夹会试中保持同步了。
- -it 让docker后台交互运行
- python:latest 镜像名
- 最后是docker内要运行的指令。
方法二:
#前提是docker已经存在 python:latest 镜像
docker run --name mypython -it python:latest -v $PWD/myapp:/usr/src/python -w /usr/src/python /bin/bash
-
-i:交互操作
-
-t:终端
-
python:latest 对应的即为 REPOSITORY:TAG
-
/bin/bash:这里我们希望有个交互式 Shell,因此用的是 /bin/bash
-
-v $PWD/myapp:/usr/src/python将主机中当前目录下的
myapp(先cd到当前目录,确保当前目录下有myapp文件夹)挂载到容器的/usr/src/python -
-w /usr/src/python指定容器的
/usr/src/python目录为工作目录
3.进入容器内配置
3.1添加ssh服务
进入docker
#查看mypython的容器id
docker ps -a
#进入容器ID为18f89ebd83aa的容器内部
docker exec -it 18f89ebd83aa /bin/bash
在容器中输入以下内容,安装ssh服务
#apt是 Shell前端软件包管理命令
apt update
apt install -y openssh-server
输入vim /etc/ssh/sshd_config,打开ssh配置文件,修改以下内容,以允许root账户通过密码登录:

注释掉这行:PermitRootLogin prohibit-password
新建一行 添加:PermitRootLogin yes
说明:
PermitRootLogin yes 允许root登录,设为yes。
PermitRootLogin prohibit-password 允许root登录,但是禁止root用密码登录
很明显这行是需要被注释掉的!!!
确保配置文件中这几项是如下内容
PubkeyAuthentication yes #启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径
PermitRootLogin yes #root能使用ssh登录
要修改root用户的密码(在容器内)
[root@*******]# passwd
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
重启ssh,退出docker然后测试一下。
#重启ssh服务
/etc/init.d/ssh restart
#另一个重启ssh服务的语句
#service ssh restart
#退出容器
exit
# 输入一下指令,验证端口映射无误
sudo docker port [容器ID] 22
# 如果设置正确,将输出:
#0.0.0.0:8022
备注:
退出docker后ssh connection refused.
原因:退出docker后,ssh会被关掉,先通过服务器docker exec进入container,然后输入以下指令启动ssh服务
/etc/init.d/ssh start
在自己的笔记本上,打开cmd,输入ssh尝试连接
ssh username@server_IP -p 8022
# 回车后输入密码,就可以从本地登录远程服务器的docker了
4 配置VS Code
打开VS code,在扩展栏(或者按ctr+shift+X)查找安装Remote Development

安装完成后需要reload一下,然后按ctr+shift+p,打开查找栏,输入remote-ssh,选择open Configuration file

Host随便起名字,这里我用AutoML_docker命名。在HostName的地方输入服务器的ip,注意端口Port是我们之前docker映射到服务器上的端口号。

配置成功后左边会多出一个远程浏览的标签,点开就可以看到刚才配置的远程连接了。点击之后要输入密码,即我们创建docker后修改的root密码。

5配置vscode debugger
菜单查看-扩展或者Ctrl + Shift + X,在商店中搜索“Python”,找到“适Python extension for Visual Studio Code”安装在服务器docker中,然后重启VSCode。
之后,菜单查看-命令面板或者Ctrl + Shift + P,输入“python: select interpreter”,点击选择解析器,稍等几秒钟,就会列出在系统中找到的Python环境(Python环境要加入环境变量才能被找到),点击需要的python解析器即可。
出现找不到python的原因,很有可能是版本没装对。

应该是红框里的这个
打开debug选项卡,选择Add configuration

编辑launch.json文件如下:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "python",
"request": "launch",
"name": "Python: Current File (Integrated Terminal)",
"skipFiles": [
"<node_internals>/**"
],
"program": "${file}"
}
]
}
launch.json常用的调试配置有:
- “Python: Current File (Integrated Terminal)”:该配置表示在VSCode内置的命令行中直接执行当前激活的Python文件。如果需要制定要执行的文件,可以修改"program": " f i l e " 中 的 {file}"中的 file"中的{file}宏为需要的文件。
- “Python: Current File (External Terminal)”:该配置功能和上面的相同,区别是不使用VSCode内置命令行,而新打开一个命令行。
- “Python: Attach”:该配置是附件到另外一个进程的调试方式。
6 结束
Ok,至此配置VScode就结束了,可以选择刚才配置的解释器来逐行调试docker内的代码了。因为docker的代码是通过-v与服务器同步的,所以修改后也会直接改动服务器上存的代码,大家git的时候就只需要在服务器端设置,而不用在docker内再考虑这个问题了。
7 容器保存为镜像
#docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit -a "dadao" -m "my test" a404c6c174a2 mymysql:v1
#示例
docker commit -a "dadao" -m "配置好的python" 18f89ebd83aa mypython:v20211123
OPTIONS说明:
- **-a 😗*提交的镜像作者;
- a404c6c174a2 容器ID
- mymysql:v1 镜像:标签
- **-c 😗*使用Dockerfile指令来创建镜像;
- **-m 😗*提交时的说明文字;
- **-p 😗*在commit时,将容器暂停。
8 基于新镜像启动容器
–基于新镜像运行容器
docker run -t -i -p 8022:22 --name 新容器名称 镜像名称:镜像标签 /bin/bash
或
docker run -p 8022:22 -d centos7-ssh:latest /run.sh
当容器内22端口启动后才可以用docker ps -a看到相应的端口
保证22端口启动后就可以进行远程 连接了。
9 附注
9.1 查看容器开放的端口
docker port 18f89ebd83aa
#查看docker ID为18f89ebd83aa的容器开放端口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-irvubaS6-1637643489541)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211123122130398.png)]
22是容器端口;
-d centos7-ssh:latest /run.sh**
当容器内22端口启动后才可以用docker ps -a看到相应的端口
保证22端口启动后就可以进行远程 连接了。
9 附注
9.1 查看容器开放的端口
docker port 18f89ebd83aa
#查看docker ID为18f89ebd83aa的容器开放端口
[外链图片转存中…(img-irvubaS6-1637643489541)]
22是容器端口;
0.0.0.0:8022是22映射到宿主机上的端口。
参考:[https://blog.csdn.net/lifengss/article/details/105300459]

603

被折叠的 条评论
为什么被折叠?



