pycharm远程调试docker容器内程序
文章链接: 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容器内程序的更多相关文章
- Docker容器内连接宿主机即CentOS的Mysql服务器
docker的宿主机是虚拟机下的CentOS 博主最近遇到一种情况,从服务器拷贝了一份数据库在宿主机Mysql服务器上,想要用本地的数据库测试自己的代码正确性,但是项目程序都是靠docker一键部署的 ...
- Ansible 开发调试 之【pycharm远程调试】
介绍 PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元测试.版本 ...
- 使用Python控制1602液晶屏实时显示时间(附PyCharm远程调试)
前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 本文介绍一下UP板的GPIO资源使用,以及一个使用Python演示一个简单的demo. 本文使用Markdown写成,为获得更好的 ...
- Flume+Kafka收集Docker容器内分布式日志应用实践
1 背景和问题 随着云计算.PaaS平台的普及,虚拟化.容器化等技术的应用,例如Docker等技术,越来越多的服务会部署在云端.通常,我们需要需要获取日志,来进行监控.分析.预测.统计等工作,但是云端 ...
- 记录一次docker容器内修改my.cnf配置文件max_allowed_packet参数的过程
1. 问题背景 在一次新版本功能开发完毕,配合测试的过程中,测试反馈某个XxlJob定时任务一直执行失败,在分析了日志之后,找到了报错的原因: Packet for query is too larg ...
- Jenkins(Docker容器内)使用宿主机的docker命令
1.Jenkins镜像 Docker容器内的Jenkins使用容器外宿主机的Docker(即DooD,还有另外的情况就是DioD),google一下有几种说法,但是都没试成功(试过一种就是修改宿主机/ ...
- [pycharm]远程调试服务器项目
Pycharm远程调试服务器项目 准备工作 创建一个临时项目,用pycharm打开项目 mkdir xxx 准备一台远程服务器,尝试连接服务器 ssh worker@ip 同步项目到pycharm 配 ...
- pycharm远程调试配置
目录: 安装pycharm 配置pycharm远程调试 使用测试 一.安装pycharm(略) 二.配置pycharm远程调试 1.菜单--->Tools--->Deployment--- ...
- centos:解决docker容器内挂载目录无权限 ls: cannot open directory .: Permission denied
docker运行一个容器后,将主机中当前目录下的文件夹挂载到容器的文件夹后 进入到docker容器内对应的挂载目录中,运行命令ls后提示: ls: cannot open directory .: P ...
随机推荐
- Mysql [Err] 1292 - Truncated incorrect DOUBLE value
Mysql [Err] 1292 - Truncated incorrect DOUBLE value: 'a' - 苍 - 博客园 https://www.cnblogs.com/cang12138 ...
- 开发工具之Vscode编辑器
Visual Studio Code(以下简称vscode)是一个轻量且强大的代码编辑器,支持Windows,OS X和Linux.内置JavaScript.TypeScript和Node.js支持, ...
- [转帖] Linux 时间参数
Linux下文件的三个时间参数 https://blog.csdn.net/GGxiaobai/article/details/53609478 想用touch修改创建时间呢 发现不知道怎么修改来着. ...
- Django1-HTTP协议介绍
何为http协议(Hypertext Transfer Protocol,超文本传输协议)? 所谓协议,就是指双方遵循的规范.http协议,就是浏览器和服务器之间进行“沟通”的一种规范.我们在看空间, ...
- 利用bootstrap-select.min.js实现bootstrap下拉列表的单选和多选
参考文章:https://blog.csdn.net/qq_37677519/article/details/78143522
- Monte Carlo Method(蒙特·卡罗方法)
0-故事: 蒙特卡罗方法是计算模拟的基础,其名字来源于世界著名的赌城——摩纳哥的蒙特卡罗. 蒙特卡罗一词来源于意大利语,是为了纪念王子摩纳哥查理三世.蒙特卡罗(MonteCarlo)虽然是个赌城,但很 ...
- python3 while-else和for-else语法
while-else: while判断条件不成立时,执行else语句: 语法: while 判断条件: 语句1.... else: 语句2.... i初始值为2,i>0成立,则执行while语句 ...
- P4178 Tree(点分治)
题面要求小于等于K的路径数目,我么很自然的想到点分治(不会的就戳我) 这道题的统计答案与模板题不一样的地方是由等于K到小于等于K 那么我们可以把每一个子节点到当前根(重心)的距离排序,然后用类似双指针 ...
- [SDOI2017]遗忘的集合
[SDOI2017]遗忘的集合 综合了很多套路的题 一看就是完全背包 生成函数! 转化为连乘积形式 Pi....=F 求Ln! 降次才可以解方程 发现方程是: f[i]=∑t|i : bool(t)* ...
- CF350E 【Wrong Floyd】
Description 给定n个点,m条边,k个标记点,hack掉给出的程序. Solution 先考虑不可能hack掉的情况.当所有点都是标记点的时候肯定不能hack掉,也就是\(n=k\).还有就 ...