• Docker容器启动时,容器内应用服务自启动设置


    Docker 运行镜像时发现容器是运行起来了,但是容器的应用服务还是在关闭状态,没有开启。每次容器运行时还要进入正在运行的容器内启动应用服务。进入正在运行的容器中执行以下命令:

    $ docker exec -it -d XXX /bin/bash
    其中:
    -d 后台运行
    XXX 容器的名字
    /bin/bash 以交互的方式运行容器

    测试环境安装的是lnmp环境,采用LNMP一键安装包LNMP镜像
    安装过程如下:
    第一步:拉取centos,获取的是官方最新centos

    $ docker pull centos
    第二步: 以交互的方式进入容器内

    docker run -it -d centos:latest /bin/bash
    第三步: 在centos容器中执行LNMP一键安装包
    第四步:安装完成后退出容器,将刚刚的容器制作成镜像

    $ docker commit -m="AA-BB" -a="roon" 7485859a46ad lnmp:v1
    其中:
    -m:提交的描述信息
    -a:指定镜像作者
    7485859a46ad:容器ID
    lnmp:v1:指定要创建的目标镜像名
    到此lnmp 镜像制作完毕

    $ docker images
    会发现刚刚制作好的镜像

    运行LNMP镜像

    $ docker run -it -d -p 9508:80 lnmp:v1
    -p 9508:80 将服务器9508端口映射到lnmp:v1容器的80端口
    在浏览器输入
    http://ip:9508
    其中也可以输入域名
    发现连接不上
    查找问题:
    容器已经在运行中了,端口也映射了,怎么就不能访问呢,
    进入容器中看看

    $docker exec -it -d XXX /bin/bash
    运行

    $ netstat -nutlp
    此命令是查看所有进程端口情况

    what 应用服务器没有启动,所有端口都没有在运行,在容器中执行:

    $ lnmp start
    再次查看进程端口情况,发现所有端口运行起来了

    在浏览器中再次访问,发现访问成功了

    但是每次容器启动的时候都要进入容器内操作应用服务器的开启,有没有什么好的方法容器启动的时候,容器内的应用服务器也启动。网上查资料,还真的有这方面的资料。但是发现好多都是类似的内容,不知道真假。自己尝试应用。
    第一步:进入容器
    在容器的根目录下创建start.sh脚本
    网上参考的命令

    #!/bin/sh
    /bin/serviceA start #启动服务
    /bin/bash #保留一个终端,防止容器自动退出
    这个命令不符合自己的实际需要,于是进行改写

    #!/bin/sh
    lnmp start #启动lnmp服务器的命令
    /bin/bash

    保存退出,重新创建lnmp镜像:lnmp:v2

    如下命令启动镜像

    $ docker run -it -d -p 9508:80 lnmp:v2 /start.sh
    发现还是出错,错误如下:

    docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: "/start.sh": permission denied": unknown.
    原来是没有给start.sh权限,再次进入容器修改start.sh权限:

    $ chmod 777 start.sh
    将最终版本的容器重新制作成镜像:lnmp:v3

    $ docker run -it -d -p 9508:80 lnmp:v3 /start.sh
    这次启动成功了,在进入容器查看端口运行情况发现容器内的应用服务器已经运行起来了。
    在浏览器访问9508端口也运行成功了,到此容器内应用服务自启动设置完毕
    测试过程中遇到的其他问题:
    1.端口9508有时因为运行其他内容而占用了,这时候可以杀死进程或者更换其他可用的端口,杀死端口的命令

    $ kill 9508
    2.start.sh脚本的命令
    本实例采用的是lnmp服务器,启动的命令是:lnmp start,如启动其他的进程,根据情况添加命令
    如:启动php,mysql:
    service php-pfm start
    service mysqld start
    可以在start.sh添加

    #!/bin/sh
    service php-pfm start
    service mysqld start
    /bin/bash

    --------------------------------------------------------------------------------------------------
    原文链接:https://blog.csdn.net/wang_magento/article/details/100763622

  • 相关阅读:
    测试管理工具
    测试用例--zy
    测试计划和测试用例
    测试用例
    软件测试基础
    异步任务 ---- django-celery
    图片验证码接口
    测试作业
    数据库原理
    HTTPS原理
  • 原文地址:https://www.cnblogs.com/x666-6/p/15433385.html
Copyright © 2020-2023  润新知