pycharm远程调试docker容器内程序

时间:2022-09-24 07:33:45

文章链接: https://blog.csdn.net/hanchaobiao/article/details/84069299

参考链接: https://blog.csdn.net/github_33934628/article/details/80919646   https://blog.csdn.net/Wendy019900107/article/details/81985837

一、首先假设你已启动了一个docker容器,并在启动时将容器的22端口映射到宿主机的10022端口
启动示例:

docker run -d --name django_api -p 8000:80 -p 10022:22 -p 5000:5000 --link mysql_host:mymysql --link redis_host:myredis  -v $PWD:/home/docker/code/app/:Z python3/django/ngnix

启动后使用xshell远程连接宿主机的10022端口是无法连接成功的,此时我们需要进入docker容器内部进行一些操作:

二、进行容器内部修改
彩蛋:文章最后我会讲解如何修改Dockerfile 使其在建立时就允许ssh远程登陆

docker exec -it 容器名 /bin/bash

1、修改root用户密码

passwd

2、首先检查容器内部是否以安装 openssh-server与openssh-client 若没安装执行一下命令安装

apt-get install openssh-server
apt-get install openssh-client

3、修改SSH配置文件以下选项

vim /etc/ssh/sshd_config

# PermitRootLogin prohibit-password # 默认打开 禁止root用户使用密码登陆,需要将其注释
RSAAuthentication yes #启用 RSA 认证
PubkeyAuthentication yes #启用公钥私钥配对认证方式
PermitRootLogin yes #允许root用户使用ssh登录

4、启动sshd服务

/etc/init.d/ssh restart

5、退出容器,连接测试

ssh root@127.0.0.1 -p 10022

输入密码成功进入容器内部即配置成功

6、如若需要将修改后的容器重新保存为镜像,则可进行相应处理,本文直接使用修改后的镜像进行后续操作

三、使用Pycharm远程连接
1、打开配置界面

2、按照远程服务器信息配置信息:配置好后可以点击测试连接测试是否能够连接成功

点击测试连接

将本地的代码和服务器代码连接

此时便可以远程调试代码了

测试上传本地代码到服务器:

彩蛋:修改Dockerfile 建立镜像时就允许用户通过远程连接
由于我在CMD中启动了 supervisord 此时容器启动后需要手动进入容器启动sshd

/etc/init.d/ssh start
或者将启动命令放入supervisor-app.conf文件中,使其建立容器时就启动

# Copyright 2013 Thatcher Peskens
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

FROM ubuntu:16.04

MAINTAINER Dockerfiles

# Install required packages and remove the apt packages cache when done.

RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y \
git \
vim \
python3 \
python3-dev \
python3-setuptools \
python3-pip \
nginx \
supervisor \
openssh-server \
sqlite3 && \
pip3 install -U pip setuptools && \
rm -rf /var/lib/apt/lists/*

# 更新pip
RUN pip3 install --upgrade pip
# install uwsgi now because it takes a little while
RUN pip3 install uwsgi
RUN pip3 install meld3==1.0.0
# setup all the configfiles
RUN echo "daemon off;" >> /etc/nginx/nginx.conf

# 设置root用户密码
RUN echo root:hancb|chpasswd

# 允许root用户使用密码通过ssh登录
RUN echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
RUN sed -i 's/PermitRootLogin prohibit-password/# PermitRootLogin prohibit-password/' /etc/ssh/sshd_config

## 启动ssh连接
RUN /etc/init.d/ssh start

COPY nginx-app.conf /home/docker/code/app/
# 将配置文件软连接过去, 注意需要写绝对路径
RUN rm -f /etc/nginx/sites-available/default
RUN ln -s /home/docker/code/app/nginx-app.conf /etc/nginx/sites-available/default

COPY supervisor-app.conf /home/docker/code/app/
RUN rm -f /etc/supervisor/conf.d/supervisor-app.conf
RUN ln -s /home/docker/code/app/supervisor-app.conf /etc/supervisor/conf.d/
RUN ln -s /home/docker/code/app/conf/supervisord.conf /etc/supervisor/conf.d/ # celery

# COPY requirements.txt and RUN pip install BEFORE adding the rest of your code, this will cause Docker's caching mechanism
# to prevent re-installing (all your) dependencies when you made a change a line or two in your app.

COPY requirements.txt /home/docker/code/app/
RUN pip3 install -r /home/docker/code/app/requirements.txt

# 设置默认python版本为python3
# RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 3
# RUN update-alternatives --install /usr/bin/python python /usr/bin/python2 2

# add (the rest of) our code
COPY uwsgi.ini /home/docker/code/app/

COPY uwsgi_params /home/docker/code/app/

# install django, normally you would remove this step because your project would already
# be installed in the code/app/ directory
# RUN django-admin.py startproject website /home/docker/code/app/

EXPOSE 80
CMD ["supervisord", "-n"]

pycharm远程调试docker容器内程序的更多相关文章

  1. Ansible 开发调试 之【pycharm远程调试】

    介绍 PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元测试.版本 ...

  2. 使用Python控制1602液晶屏实时显示时间(附PyCharm远程调试)

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 本文介绍一下UP板的GPIO资源使用,以及一个使用Python演示一个简单的demo. 本文使用Markdown写成,为获得更好的 ...

  3. Flume+Kafka收集Docker容器内分布式日志应用实践

    1 背景和问题 随着云计算.PaaS平台的普及,虚拟化.容器化等技术的应用,例如Docker等技术,越来越多的服务会部署在云端.通常,我们需要需要获取日志,来进行监控.分析.预测.统计等工作,但是云端 ...

  4. Jenkins(Docker容器内)使用宿主机的docker命令

    1.Jenkins镜像 Docker容器内的Jenkins使用容器外宿主机的Docker(即DooD,还有另外的情况就是DioD),google一下有几种说法,但是都没试成功(试过一种就是修改宿主机/ ...

  5. [pycharm]远程调试服务器项目

    Pycharm远程调试服务器项目 准备工作 创建一个临时项目,用pycharm打开项目 mkdir xxx 准备一台远程服务器,尝试连接服务器 ssh worker@ip 同步项目到pycharm 配 ...

  6. pycharm远程调试配置

    目录: 安装pycharm 配置pycharm远程调试 使用测试 一.安装pycharm(略) 二.配置pycharm远程调试 1.菜单--->Tools--->Deployment--- ...

  7. centos:解决docker容器内挂载目录无权限 ls: cannot open directory .: Permission denied

    docker运行一个容器后,将主机中当前目录下的文件夹挂载到容器的文件夹后 进入到docker容器内对应的挂载目录中,运行命令ls后提示: ls: cannot open directory .: P ...

  8. Docker容器内中文乱码

    Docker容器内中文乱码 一.通过Dockerfile解决中文乱码问题 方式二: 二.临时解决 方式二: 三.修改jre/lib/fonts下的字体 CSDN:黑猫_:Dockerfile 创建容器 ...

  9. Docker容器内Mysql大小写敏感方案解决

    Docker容器内Mysql大小写敏感方案解决 一.(lower_case_table_names)参数说明 二.Docker 部署 MySql 并修改为大小写不敏感 2.1直接在Docker启动的时 ...

随机推荐

  1. 强大的自适应jQuery焦点图特效

    jQuery焦点图切换自适应效果 自适应jQuery焦点图特效是一款支持移动端的响应式jQuery焦点图插件,支持flexible布局,支持移动触摸事件等. 今天我们要来分享一款很灵活的jQuery焦 ...

  2. UML学习-活动图创建

    活动图(Activity Diagram)可以实现对系统动态行为的建模,主要是将用例细化,即用例内部的细节可以以活动图的方式描述.活动图描述活动的顺序,主要表活动之间的控制流,是内部处理驱动的流程,在 ...

  3. android从网络获取图片

    http://blog.csdn.net/wangjinyu501/article/details/8219317 http://www.cnblogs.com/JerryWang1991/archi ...

  4. c语言复杂声明解析

    这是个好东西,接触c语言好几年了,第一次看到这东西,惊喜万分. 先提供个分析案例,以后看方便 vector <int> * (*seq_array[]) (int )={func1,fun ...

  5. 15、手把手教你Extjs5(十五)各种Grid列的自定义渲染

    Grid各列已经能够展示出来了.列的类型包括字符型,整型,浮点型,货币型,百分比型,日期型和布尔型,我自定义了各种类型的渲染样式: 1.整型:标题栏居中,数值靠右显示,正数颜色为蓝色,负数颜色为红色, ...

  6. ubuntu下pycharm调用Hanlp实践分享

    前几天看了大快的举办的大数据论坛峰会的现场直播,惊喜的是hanlp2.0版本发布.Hanlp2.0版本将会支持任意多的语种,感觉还是挺好的!不过更多关于hanlp2.0的信息,可能还需要过一段时间才能 ...

  7. JDBC有哪些接口

    1 实现Driver接口的对象是JDBC进行数据库访问的开始,可以通过java.lang.Class类的forName(),动态加载驱动程序. Class.forName("驱动程序&quo ...

  8. &lbrack;T-ARA&rsqb;&lbrack;I&&num;39&semi;m so bad&rsqb;

    歌词来源:http://music.163.com/#/song?id=22704433 作曲 : 김태현 , 조영수 [作曲 : k/gim-Tae-hyeon , c/jo-yeong-su] 作 ...

  9. day008-File文件

    1. File 文件和目录路径名的抽象表示形式. 一个File类对象就代表了一个文件或文件夹. 1.1 File类的作用 用来操作硬盘上的文件或文件夹 绝对路径:一般是以盘符开始的,比如:C:/Jav ...

  10. 2018&period;11&period;18 Sturts2配置详解&amp&semi;常量配置进阶

    1.基于struts.xml 的节点参数配置 package节点 action节点 result节点 include节点 2.struts常量配置以及如何修改为自己的想要的配置 2.1struts默认 ...