VS code远程连接linux服务器中docker里的python

您所在的位置:网站首页 vscode远程开发python VS code远程连接linux服务器中docker里的python

VS code远程连接linux服务器中docker里的python

2023-08-25 04:18| 来源: 网络整理| 查看: 265

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": [ "/**" ], "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 容器IDmymysql: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]



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3