docker运行yyets_如何让操作系统为ubuntu的docker容器在启动时自动重启sshd服务?
实现你的需求有很多种做法。
1、如果在容器没有启动 sshd 服务的情况下又想通过一条ssh命令就进入容器内部,可以将 docker exec 与 ssh 两条指令结合到一起去:
ssh -t 云主机IP 'docker exec -it mypython bash'
什么?嫌命令太长?用神奇的 alias 啊,想要多短就有多短:
alias sp='ssh -t 云主机IP "docker exec -it mypython bash"'
这样不管你容器内部有没有启动 sshd ,运行 sp 就可以直接进入容器内;
2、既然你的容器是用来运行 python 服务的,那为何不用 supervisor 来管理容器内进程呢 ?supervisor 同时管理 sshd 进程和你自己的 python 服务进程,然后将启动 supervisor 进程的命令作为容器的 entrypoint,这样就能确保每次启动容器的时候既启动了 sshd , 又启动了你自己的 python 服务;
比如我用 supervisor 来同时管理 redis 和 sshd 服务,构建镜像的过程如下:
Dockerfile:
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get install -y openssh-server redis-server supervisor
RUN mkdir -p /var/run/sshd
RUN sed -i 's/daemonize yes/daemonize no/' /etc/redis/redis.conf
RUN sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' /etc/redis/redis.conf
COPY supervisord.conf /etc/supervisor/supervisord.conf
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]
supervisord.conf
[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D
autostart=true
autorestart=true
startsecs=3
[program:redis]
command=/usr/bin/redis-server /etc/redis/redis.conf
autostart=true
autorestart=true
startsecs=3
build 镜像
docker build --network=host -t multi_process:v1 .
构建完成 run 一个容器
docker run -itd --name mp multi_process:v1
然后进入容器查看容器内部进程
docker exec -it mp bash
root@c59c5fca5c53:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 11:12 pts/0 00:00:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
root 8 1 0 11:12 pts/0 00:00:00 /usr/sbin/sshd -D
root 9 1 0 11:12 pts/0 00:00:00 /usr/bin/redis-server 0.0.0.0:6379
可以看到容器内的 init 进程是 supervisord,然后启动了 sshd 和 redis-server 两个子进程,这样一个容器就能在提供 redis 服务的同时又支持 ssh 登入了。
3、容器传入传出数据,你都用了卷了,所要传输数据的目录也是卷挂载的目录,那直接在宿主机上操作呗,scp 正向 反向都能拷贝
scp -r local/code/path user@云主机IP:~/code
或者
scp -r user@云主机IP:~/code local/code/path
通过宿主机传输跟通过容器直接传输是一样的;
4、不建议以脚本形式在 entrypoint 里同时启动 sshd 和你自己的 python 服务进程,为什么呢?因为这样做会导致的容器关闭时进程能不能有效回收的问题,如果容器内进程不能正常回收,就会出现僵尸进程,而Docker 本身只是进程隔离,处理这些僵尸进程有时需要重启宿主机,如果宿主机运行多个容器的话,其他的服务就跟着受影响了。
其他 docker 相关问题的回答:学习Docker哪本书最好?www.zhihu.com
docker运行yyets_如何让操作系统为ubuntu的docker容器在启动时自动重启sshd服务?相关推荐
- docker运行yyets_你应该知道的5个开源Docker工具...
Docker 社区已经创建了许多开源工具,它们能帮我们处理各种用例.作者在本文中推荐了 5 款认为最有用的 Docker 工具,分别是 Watchtower(自动更新 Docker 容器).docke ...
- Android 编程下帧动画在 Activity 启动时自动运行的几种方式
Android 开发过程中部分 Activity 在显示的时候就要求给用户显示一个进度框来改善用户体验,比如:Activity 在启动的时候就去联网请求数据.读取数据库内容等.进度框显示样式如下,采用 ...
- docker运行yyets_Docker 后台进程参数-------更改Docker运行根目录的方法
参数介绍 --api-enable-cors=false 远程API调用. -b, --bridge="" 桥接一个系统上的网桥设备到 Docker 容器里,当使用 none 可以 ...
- docker运行yyets_使用Docker镜像
写在前面 镜像是Docker三大核心概念中最重要的一部分,而Docker运行容器前需要本地存在对应的镜像,如果镜像不存在,Docker会尝试从默认的镜像仓库中下载(默认使用Docker Hub公共注册 ...
- 如何使WINCE启动时自动运行应用程序
一.快捷方式 假定Windows CE.NET目标工程为CEPC类型,目录为E:ProjectMyWinCE,并且工程已经Build(或者Rebuild)成功: 假定Windows CE.NET的应用 ...
- 我的docker随笔15:MySQL启动时自动创建数据库
一.背景及分析 MySQL容器启动时,会自动创建一些必要的数据库,比如MySQL,这是官方默认的做法.但是,在实际中,还需要让MySQL自动创建我们自定义的数据库.本文就此应用场合进行探究. 一般的做 ...
- ubuntu 开机后不动_Ubuntu启动时停止的问题
Ubuntu启动时停留在选择系统的那个页面. 选择第一个ubuntu with linux2.6.28-8-server后 出现一段字符,但不动了, 字符最后一个是(initramfs) 在后面输入 ...
- python模拟windows启动,在Windows启动时自动运行Python脚本?
将Python脚本添加到Windows启动时,基本上表示Python脚本将在Windows启动时运行.这可以通过两步过程来完成- 步骤#1:在Windows启动文件夹中添加或添加脚本 在启动Windo ...
- docker运行yyets_为什么在Docker容器内不能执行netstat
赞同来自: 谢谢你们的支持.通过Dockerfile,安装一个net-tools就解决了.不过,始终没法安装. 如果哪们同学解决了,希望共享下. <pre> FROM de ...
最新文章
- TensorFlow四种Cross Entropy算法实现和应用
- YUM(Yellow gog Updater Modifie)服务器的配置
- android将被代替的控件,Android 控件被忽略的属性
- 如何用 Blazor 实现 Ant Design 组件库(二)
- onclick进不去ajax,在ajax调用之后处理onclick函数
- 解决Git Log在IDEA中乱码的问题
- MySQL 直接存储图片并在 html 页面中展示,点击下载
- Mybatis中的@SelectKey注解
- python的urllib2包基本使用方法
- JavaScript DOM操作总结
- python共享单车数据分析_共享单车数据可视化分析(Python/Seaborn)
- 69张图回顾2021和看透2022
- ArcGIS Pro 创建tpk
- 【影评】:卧虎藏龙中的人物性格的分析
- obs代码总体架构图
- linux NM 命令使用介绍
- 聚播微信多开客服系统二次开发SDK服务端接口
- Windows 通过bat脚本启动Eureka,Cassandra和redis-server
- 长安链ChainMaker基于公钥用户标识的身份模式介绍
- SpringBoot开发网页即时聊天室/IM通信/WebSocket/即时通讯