叫板OpenStack:用Docker实现私有云(问题与解决方案)

看了叫板OpenStack:用Docker实现私有云这篇文章,感觉讲解非常具体详实,于是照着样子实验了一遍。

在最后启动docker中的系统时,出现ssh无法链接docker中系统的情况。

导致这种情况可能有很多原因,我遇到的问题是supervisord无法启动。查看问题之后发现,是因为以下指令中缺乏指定的配置文件,并且注意,supervisord指定配置文件需要用绝对路径。

docker run -p 301:22 -d --name test ubuntu /usr/bin/supervisord 

因此,通过修改该指令,可以成功访问。

docker run -p 301:22 -d --name test ubuntu /usr/bin/supervisord  -c /etc/supervisor/conf.d/supervisord.conf

配置文件具体如下:

; supervisor config file

[unix_http_server]
file=/var/run/supervisor.sock   ; (the path to the socket file)
chmod=0700                       ; sockef file mode (default 0700)

[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)
nodaemon=true    ;

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket

; The [include] section can just contain the "files" setting.  This
; setting can list multiple files (separated by whitespace or
; newlines).  It can also contain wildcards.  The filenames are
; interpreted as relative to this file.  Included files *cannot*
; include files themselves.

[include]
files = /etc/supervisor/conf.d/*.conf

[program:sshd]
command=/usr/sbin/sshd -D ;

 

此外,有其他方式启动ssh服务,在博客https://blog.****.net/ypbsyy/article/details/80529101中对ssh服务的启动提出了第二种解决方案,即在docker run的过程中直接启动sshd服务,这种方式直观易懂,且简单粗暴。

启动镜像的容器,并映射本地的一个闲置的端口(例如301)到容器的22端口,并启动容器的sudo docker run -d -p 301:22 ubuntu:14.04 /usr/sbin/sshd -D

现在打开新的终端,输入ssh [email protected] -p 10000,链接成功.

我在采用了这种方式之后,成功通过ssh登录了docker中的系统,如下图所示。叫板OpenStack:用Docker实现私有云(问题与解决方案)