当前位置: 首页 > Linux

docker里面commit镜像后无法启动

时间:2023-04-06 19:47:54 Linux

因为官方的postgresql镜像对linux来说太精简了,基本的yum,telnet,ping都没有了,很多操作不方便,所以这几天想自己做一个镜像。目前思路是在基础镜像centos上安装postgresql库,然后commit1.现象:提交镜像后通过镜像中的shell脚本启动数据库,镜像状态没有启动成功,报错内容报告:无法在本地找到图像“mypg_02:最新”尝试拉存储库docker.io/library/mypg_02.../usr/bin/docker-current:获取https://registry-1.docker.io/v2/:拨号tcp:查找registry-1。ip:53上的docker.io:服务器行为异常。请参阅“/usr/bin/docker-currentrun--help”。启动脚本:dockerrun-d--namemypg01-p5201:5432--networknetwork-bridgemypg_02/root/dockerStart/start.sh其中,启动脚本内容:#!/bin/bashsu-postgres-c》/opt/pgdata/pg5432/scripts/startServer5432.sh"2.问题原因先查看以下操作,宿主机操作:dockerpullcentos:7.4.1708#pullimagedockerrun-d-v/root/docker_dirs/centos01:/opt/centoscentos:7.4.1708/bin/sh-c"whiletrue;doechohelloworld;sleep60;done"#运行centos镜像,如果centos镜像的命令是/bin/bash,运行后会自动退出,因为容器检测不到正在运行的进程,下载PG库的安装文件,上传到宿主机的/root/d在docker_dirs/centos01容器中运行,安装pg库,root用户执行以下命令:cp/opt/centos/yum.repos.d/*。#配置yum源yuminstall-yreadline-develgcczlib-develgccautomakeautoconflibtoolmakebzip2#安装依赖包cd/opt/cpcentos/postgresql-12.2.tar.bz2.tar-xvfpostgresql-12.2.tar.bz2#解压文件ln-spostgresql-12.2postgresqlmkdir-ppgdata/pg5432cdpgdata/pg5432mkdir-p{data,backups,scripts,archive_wals}cd/opt/postgresql/opt/postgresql/configure--prefix=/opt/postgresql#Compile并安装makemakeinstalluseraddpostgrescd/optchown-Rpostgres:postgresp*postgresusers执行如下命令/opt/postgresql/bin/initdb-D/opt/pgdata/pg5432/data#initializedatabasemkdir/opt/pgdata/pg5432/logs/opt/postgresql/bin/pg_ctl-D/opt/pgdata/pg5432/data-l/opt/pgdata/pg5432/logs/startlogs.logstart&#开始数据库验证more/opt/pgdata/pg5432/scripts/startServer5432.sh#新建启动文件/opt/postgresql/bin/pg_ctl-D/opt/pgdata/pg5432/data-l/opt/pgdata/pg5432/logs/startlogs.logstart&root用户执行以下命令/root/dockerStart/start.sh#创建启动脚本#!/bin/bashsu-postgres-c"/opt/pgdata/pg5432/scripts/startServer5432.sh"退出容器后在宿主机上执行如下命令:dockercommitcentos01mypg_01#提交镜像dockerrun-d--namemypg02-p5300:5432--networknetwork-bridgemypg_01/root/dockerStart/start.sh#使用新镜像启动容器,但启动失败,容器保持创建状态,报错如下:/usr/bin/docker-current:来自守护进程的错误响应:驱动程序在端点mypg02上编程外部连接失败(f14f29f8eb010fc128873d022e5caa4abe59becca234588f682942acba4ad4a4):绑定0.0.0.0:5300失败:端口已分配。PORTSNAMEScb9f683c1307mypg_01"/root/dockerStart..."大约一分钟前Createdmypg02我的理解是自定义命令是在后台执行命令来启动PG库。容器检测不到命令是否还在继续,所以容器不会继续启动commit方式只是在基础镜像上安装一些应用,所以还是需要使用基础镜像启动:dockerrun-d--namemypg02-p5200:5432--networknetwork-bridgemypg_01/bin/sh-c"whiletrue;doechohelloworld;sleep60;done"4.总结commit方法一般用于提交用户修改的内容,比如新发布的jar包,不适合做镜像。