Centos7上使用docker镜像方式安装Sybase的报错问题处理

101 篇文章 0 订阅
5 篇文章 0 订阅

先说一下 yum update 和 yum upgrade 的区别:
yum -y update  : 升级所有包,包括升级软件和升级系统内核。我用的是该方式。
yum -y upgrade : 只升级所有包,不升级软件和系统内核。


OS环境:Centos7.8
内核:uname -r(yum update 升级之前)    uname -r (yum update 升级以后)
      3.10.0-327.el7.x86_64            3.10.0-1127.13.1.el7.x86_64

刚开始我没有执行 yum -y update,直接安装 docker 服务:
yum install -y docker


sybase-docker:docker.io/datagrip/sybase
INDEX       NAME                            DESCRIPTION          STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/datagrip/sybase       Sybase 15.7 & 16.0   18                   [OK]

docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
1dd7d4e5021b        datagrip/sybase     "/entrypoint.sh"    20 seconds ago   Created                                 datagrip-sybase

发现端口(PORTS)没有映射成功
网上找到了解决办法,说是重启 docker 服务即可
systemctl  restart docker

docker ps -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                            NAMES
1dd7d4e5021b        datagrip/sybase     "/entrypoint.sh"    31 seconds ago       Created             0.0.0.0:8000->5000/tcp, 0.0.0.0:8001->5001/tcp   datagrip-sybase

重新启动容器
docker start datagrip-sybase

查看容器状态
docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                            NAMES
1dd7d4e5021b        datagrip/sybase     "/entrypoint.sh"    50 seconds ago      Up 4 seconds        0.0.0.0:8000->5000/tcp, 0.0.0.0:8001->5001/tcp   datagrip-sybase

后续操作的过程中不知道为何又出现容器自动停止了(容器状态:Exited)
重新启动容器再进入容器报错
docker start datagrip-sybase
Error response from daemon: oci runtime error: container_linux.go:235: starting container process caused "process_linux.go:339: ......

网上找资料说是Linux与docker版本的兼容性问题,需要升级docker版本

查看 OS 内核版本
uname -r 
3.10.0-327.el7.x86_64

Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。

查看 docker 版本
docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-161.git64e9980.el7_8.x86_64
 Go version:      go1.10.3
 Git commit:      64e9980/1.13.1
 Built:           Tue Apr 28 14:43:01 2020
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-161.git64e9980.el7_8.x86_64
 Go version:      go1.10.3
 Git commit:      64e9980/1.13.1
 Built:           Tue Apr 28 14:43:01 2020
 OS/Arch:         linux/amd64
 Experimental:    false

升级docker版本的方法参考:《Centos7上升级docker版本

升级docker服务版本后,我docker操作的过程中碰到了问题。重新启动docker容器,还是报错:
docker start datagrip-sybase
Error response from daemon: Unknown runtime specified docker-runc
Error: failed to start containers: datagrip-sybase

执行 docker images 发现不知为何此时出现两个相同的image(REPOSITORY & TAG & IMAGE ID完全相同)
docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
datagrip/sybase     latest              29cd514762d6        11 months ago       5.92GB
datagrip/sybase     latest              29cd514762d6        11 months ago       5.92GB

尝试删除镜像报错
docker stop datagrip-sybase  #先停止容器
docker rmi 29cd514762d6
Error: No such image: 29cd514762d6

docker rmi -f $(docker images -qa)
Error: No such image: 29cd514762d6

docker rmi datagrip/sybase:latest #尝试通过 REPOSITORY:TAG 来删除还无法完全删除

最后尝试直接删镜像除物理文件
docker 镜像文件是存在/var/lib/docker/image/overlay2/imagedb/content/sha256 目录下的,sha256加密方式存储的镜像文件
cd /var/lib/docker/image/overlay2/imagedb/content/sha256
rm -rf 29cd514762d69bd7caaedc63daad32066a23e1394c11ae46e25063683128f66d

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
查看镜像终于删除了

重新加载镜像
cd /opt/sybase-img/
docker load -i sybase.tar  #刚开始内存不足,出现load失败,加大内存后load成功

docker load < sybase.tar

重新创建并运行容器
docker run -d -ti -p 8000:5000   --name datagrip-sybase datagrip/sybase

docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                            NAMES
8076e07f5f83        datagrip/sybase     "/entrypoint.sh"    7 minutes ago       Up 7 minutes        0.0.0.0:8000->5000/tcp, 0.0.0.0:8001->5001/tcp   datagrip-sybase

docker exec -it datagrip-sybase /bin/bash  #执行该操作时还是报错 OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "read init-p: connection reset by peer": unknown
source /opt/sybase/SYBASE.sh
isql -U sa -P 1q2w3e -S MYSYBASE

尝试直接整体卸载 docker 然后重新安装试试

yum remove -y docker-ce #yum 删除 docker-ce
rm -rf  /var/lib/docker #删除docker目录

重装docker-ce
yum -y install docker-ce
service docker start
cd /opt/sybase/ && docker load < sybase.tar
97ca462ad9ee: Loading layer  204.1MB/204.1MB
c2d54a859b53: Loading layer  2.318GB/2.318GB
b83283c9c6d1: Loading layer  7.984MB/7.984MB
1d83c5beeab4: Loading layer   2.56kB/2.56kB
fa2355946082: Loading layer  44.65MB/44.65MB
c10ef6de1f90: Loading layer  1.988GB/1.988GB
afe7fadcf5de: Loading layer  4.608kB/4.608kB
5af21db73a05: Loading layer  1.365GB/1.365GB
374cddce4299: Loading layer  7.168kB/7.168kB
04fa922588f1: Loading layer  200.7kB/200.7kB
d747b6167cde: Loading layer  4.096kB/4.096kB
a0f493356778: Loading layer  4.096kB/4.096kB
Loaded image: datagrip/sybase:latest

查看镜像显示正常了(只显示一个IMG)
docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
datagrip/sybase     latest              29cd514762d6        11 months ago       5.92GB

重新创建并运行容器
docker run -d -ti -p 8000:5000   --name datagrip-sybase datagrip/sybase

进入容器操作
docker exec -it datagrip-sybase /bin/bash  #还是报错 OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "read init-p: connection reset by peer": unknown
source /opt/sybase/SYBASE.sh
isql -U sa -P passwd -S MYSYBASE
isql -U tester -P guest1234 -S MYSYBASE  # cat /opt/sybase/init1.sql  #init2.sql, init3.sql可以查看用户、密码和数据库

1> select * from sysservers
2> go

/opt/sybase/ASE-15_0/scripts/installpubs2

网上有人说可能是端口或网络问题

尝试 docker run 的时候加 --expose=5000 暴露端口
docker stop datagrip-sybase
docker rm datagrip-sybase
docker run -d -ti -p 8000:5000   --expose=5000 --expose=5001 --name datagrip-sybase datagrip/sybase
docker exec -it datagrip-sybase /bin/bash
还是不行

再尝试 docker run 加 --net="host" 切换成主机网络,容器和宿主机共用主机网络,如果不加--net,默认为bridge模式
docker stop datagrip-sybase
docker rm datagrip-sybase
docker run --net="host" -d -ti -p 8000:5000   --name datagrip-sybase datagrip/sybase

docker exec -it datagrip-sybase /bin/sh
OK,切换成主机网络后,问题得到解决,可能是防火墙、端口映射方面的问题,具体原因未找到(后来我再尝试删除容器、重新再创建容器,没有加--net="host",问题没有再复现)

进入容器后,查看一下监听端口是否监听在 localhost:port 上(只允许本机访问),这样的话容器的端口映射将失败,应该检查容器内部服务监听在0.0.0.0上。
sh-4.2# netstat -an |grep 5000
tcp        0      0 0.0.0.0:5000            0.0.0.0:*               LISTEN     
sh-4.2# exit

到这里才算恢复正常,解决了所有错误。
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值