鱼C论坛

 找回密码
 立即注册
查看: 1225|回复: 16

[已解决]docker 启动容器意外退出

[复制链接]
发表于 2023-6-14 20:13:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zhangjinxuan 于 2023-7-27 21:09 编辑

容器安装时,遇到了以下问题:
[root@centos ~]# sudo docker pull universaloj/uoj-system
Using default tag: latest
latest: Pulling from universaloj/uoj-system
Digest: sha256:4dea76153cdc46269bbaa5e0ffa0d2c41ddd5cbdb10cd06dd83965340bc35de3
Status: Image is up to date for universaloj/uoj-system:latest
docker.io/universaloj/uoj-system:latest
[root@centos ~]# sudo docker run --name uoj -dit -p 43253:80 --cap-add SYS_PTRACE universaloj/uoj-system
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
1cae7f99b429c31378d41357c23bba250d051d891e98eda5bf64c3b0411fb95b

启动时,也没有什么报错,就正常启动:
[root@centos ~] systemctl start docker
[root@centos ~] docker start uoj
uoj

可是当我查看容器状态的时候,遇到了问题(复制不了,简单说一说大意):
[root@centos ~] docker ps -a
CONTAINER ID        IMAGE                                COMMAND                        CREATED                STATUS                                        PORTS        NAMES
1cae7f99b429        universaloj/uoj-system        "/bin/sh -c /opt/up"        26 minutes ago        Exited (1) About a minute ago                        uoj

这是日志的内容:
exec /bin/sh: exec format error
exec /bin/sh: exec format error
exec /bin/sh: exec format error
exec /bin/sh: exec format error
exec /bin/sh: exec format error

就一直 exec format error,一直启动不了,有谁知道这是什么意思吗,怎么解决呢,希望大神解答一下。
最佳答案
2023-6-14 21:32:50
本帖最后由 isdkz 于 2023-6-14 21:34 编辑
zhangjinxuan 发表于 2023-6-14 21:31
好的。现在有点晚了,如果不行就明天继续肝吧


docker已经安装前面的大部分步骤可以忽略

这篇文档将指导您以传统方式安装UOJ。
本文与《一键安装UOJ》只需选择一个执行。推荐使用《一键安装UOJ》。
相较于一键安装,传统安装可能耗费更多的时间。
这篇教程与vfk的readme文档有严重不同。
如果您选择传统安装,建议按照本文的方式安装,这将省去很多不必要的麻烦。


安装前的准备

您需要准备一台64位的Linux系统。

然后您需要安装docker。它是一个容器技术,暂且可以理解成虚拟机。
sudo apt install docker.io          # ubuntu, debian系统请使用这条指令
sudo yum install docker                                # CentOS系统请使用这条指令

sudo service docker start                         # 启动docker服务

另外,您可以通过下面的代码安装docker加速器(强烈推荐):
sudo su
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://3a834d99.m.daocloud.io
service docker restart

下载UOJ的源码:  
git clone https://github.com/UniversalOJ/UOJ-System.git                 # 用不了的话请使用备用:git clone https://gitee.com/Hoo1941/UOJ-System.git

如果您需要支持java,请下载这两个文件:


- JDK7u76
- JDK8u31

然后把它们放进docker/目录,替换掉jdk-7u76-linux-x64.tar.gz和jdk-8u31-linux-x64.tar.gz。



安装

接着,您需要执行下面的指令来开始安装。请注意不是docker/目录下的同名文件。
sudo ./install 

如果安装过程顺利的话,您将会看到Successfully built。

启动
安装完成后,您取得了一个镜像。现在您需要建立一个容器,用于运行UOJ:
sudo docker run --name uoj -dit -p 80:80 -p 3690:3690 --cap-add SYS_PTRACE uoj
接下来这个容器将在后台运行。

上面的代码是用于新建一个UOJ,重启服务器后不要使用docker run来启动容器。具体参阅维护文档。
如果您不希望用80端口来运行uoj,您可以把上面的-p 80:80改成-p <port>:80。

评分

参与人数 1荣誉 +1 收起 理由
myd0313 + 1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-14 20:38:36 | 显示全部楼层
本帖最后由 isdkz 于 2023-6-14 20:40 编辑

你中间有做过什么操作吗?

我这里复现不出你那个错误

Snipaste_2023-06-14_20-40-35.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-14 20:46:05 | 显示全部楼层
isdkz 发表于 2023-6-14 20:38
你中间有做过什么操作吗?

我这里复现不出你那个错误

首先,docker 应该是正常安装了的,然后我就安装了 uoj 容器,全过程如下:
[root@centos containers]# systemctl restart docker
[root@centos containers]# sudo docker pull universaloj/uoj-system
Using default tag: latest
latest: Pulling from universaloj/uoj-system
Digest: sha256:4dea76153cdc46269bbaa5e0ffa0d2c41ddd5cbdb10cd06dd83965340bc35de3
Status: Image is up to date for universaloj/uoj-system:latest
docker.io/universaloj/uoj-system:latest
[root@centos containers]# sudo docker run --name uoj -dit -p 8080:80 --cap-add SYS_PTRACE universaloj/uoj-system #已经开放了 8080 端口
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
a3e113cf60981baaddef229dfe59ba8e2f5ce4ffc8893a4c9784ac6dc62cd7b6
[root@centos containers]# docker ps -a #因为这里显示了 Exited,我就只能重试一遍
CONTAINER ID   IMAGE                    COMMAND                CREATED         STATUS                     PORTS     NAMES
a3e113cf6098   universaloj/uoj-system   "/bin/sh -c /opt/up"   8 seconds ago   Exited (1) 7 seconds ago             uoj
[root@centos containers]# docker start uoj
uoj
[root@centos containers]# docker ps -a
CONTAINER ID   IMAGE                    COMMAND                CREATED              STATUS                     PORTS     NAMES
a3e113cf6098   universaloj/uoj-system   "/bin/sh -c /opt/up"   About a minute ago   Exited (1) 4 seconds ago             uoj
[root@centos containers]# docker run -it uoj /bin/bash #尝试交互式
Unable to find image 'uoj:latest' locally
docker: Error response from daemon: pull access denied for uoj, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'. 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2023-6-14 20:49:11 | 显示全部楼层
isdkz 发表于 2023-6-14 20:38
你中间有做过什么操作吗?

我这里复现不出你那个错误

请问这条警告:
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

会不会影响这个 uoj 的启动
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-14 20:59:34 | 显示全部楼层

感觉应该有关,但是在官方文档没有找到相关的说明

[root@VM-20-9-opencloudos ~]# docker run -it universaloj/uoj-system /bin/bash
root@fbe6c623e6f2:/opt# /bin/sh -c /opt/up
Initing UOJ System bundle...


==> Doing initial config and start service
* Starting MySQL database server mysqld                                                                                                                                                               [ OK ]
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
table upgrades created.
finished!
* Stopping NTP server ntpd                                                                                                                                                                            [ OK ]
* Starting NTP server ntpd                                                                                                                                                                            [ OK ]
* Stopping MySQL database server mysqld                                                                                                                                                               [ OK ]
* Starting MySQL database server mysqld                                                                                                                                                               [ OK ]
* Restarting Apache httpd web server apache2                                                                                                                                                                 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.5. Set the 'ServerName' directive globally to suppress this message
                                                                                                                                                                                                       [ OK ]


***Installation complete. Enjoy!***
* Starting NTP server ntpd                                                                                                                                                                            [ OK ]
* Starting MySQL database server mysqld                                                                                                                                                               [ OK ]
* Starting Apache httpd web server apache2                                                                                                                                                                    *


你先进交互界面手动执行一下看看输出什么(红色的为执行命令
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-14 21:07:49 | 显示全部楼层
本帖最后由 zhangjinxuan 于 2023-6-14 21:09 编辑
isdkz 发表于 2023-6-14 20:59
感觉应该有关,但是在官方文档没有找到相关的说明

[root@VM-20-9-opencloudos ~]# docker run -it uni ...


笑死,终端都进不去:

[root@centos a3e113cf60981baaddef229dfe59ba8e2f5ce4ffc8893a4c9784ac6dc62cd7b6]# docker run -it universaloj/uoj-system /bin/bash
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

exec /bin/bash: exec format error

改成sh也不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-14 21:11:42 | 显示全部楼层
zhangjinxuan 发表于 2023-6-14 21:07
笑死,终端都进不去:

[root@centos a3e113cf60981baaddef229dfe59ba8e2f5ce4ffc8893a4c9784ac6dc62 ...

应该就是系统架构不对了,我看了一下仓库里只有 amd 架构的,而你的系统是 arm架构的

我先试一下别的方法,等一下发给你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-14 21:13:28 | 显示全部楼层
isdkz 发表于 2023-6-14 21:11
应该就是系统架构不对了,我看了一下仓库里只有 amd 架构的,而你的系统是 arm架构的

我先试一下别的 ...

嗯嗯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-14 21:18:37 | 显示全部楼层

1、安装 git: yum install git

2、把项目克隆下来:git clone https://github.com/UniversalOJ/UOJ-System.git

如果上面那个网址 clone 不下来,用备用地址:git clone https://gitee.com/Hoo1941/UOJ-System.git

3、cd UOJ-System/install/compose

4、安装docker-compose:pip install docker-compose

5、启动容器:docker-compose up
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-14 21:23:41 | 显示全部楼层
isdkz 发表于 2023-6-14 21:18
1、安装 git: yum install git

2、把项目克隆下来:git clone https://github.com/UniversalOJ/UOJ- ...

不对,这个方法也不一定行,他的 docker-compose.yml 里面的所有基础镜像都只有amd平台的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-14 21:28:56 | 显示全部楼层
isdkz 发表于 2023-6-14 21:23
不对,这个方法也不一定行,他的 docker-compose.yml 里面的所有基础镜像都只有amd平台的

试一试吧,我看也没弹出什么警告,目前感觉良好。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-14 21:30:07 | 显示全部楼层
没有别人制作好的镜像就只能自己慢慢构建了,步骤有点多,官网有构建教程

我等一下发给你,你先看着搞,有遇到问题再问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-14 21:31:55 | 显示全部楼层
isdkz 发表于 2023-6-14 21:30
没有别人制作好的镜像就只能自己慢慢构建了,步骤有点多,官网有构建教程

我等一下发给你,你先看着搞, ...

好的。现在有点晚了,如果不行就明天继续肝吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-14 21:32:50 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2023-6-14 21:34 编辑
zhangjinxuan 发表于 2023-6-14 21:31
好的。现在有点晚了,如果不行就明天继续肝吧


docker已经安装前面的大部分步骤可以忽略

这篇文档将指导您以传统方式安装UOJ。
本文与《一键安装UOJ》只需选择一个执行。推荐使用《一键安装UOJ》。
相较于一键安装,传统安装可能耗费更多的时间。
这篇教程与vfk的readme文档有严重不同。
如果您选择传统安装,建议按照本文的方式安装,这将省去很多不必要的麻烦。


安装前的准备

您需要准备一台64位的Linux系统。

然后您需要安装docker。它是一个容器技术,暂且可以理解成虚拟机。
sudo apt install docker.io          # ubuntu, debian系统请使用这条指令
sudo yum install docker                                # CentOS系统请使用这条指令

sudo service docker start                         # 启动docker服务

另外,您可以通过下面的代码安装docker加速器(强烈推荐):
sudo su
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://3a834d99.m.daocloud.io
service docker restart

下载UOJ的源码:  
git clone https://github.com/UniversalOJ/UOJ-System.git                 # 用不了的话请使用备用:git clone https://gitee.com/Hoo1941/UOJ-System.git

如果您需要支持java,请下载这两个文件:


- JDK7u76
- JDK8u31

然后把它们放进docker/目录,替换掉jdk-7u76-linux-x64.tar.gz和jdk-8u31-linux-x64.tar.gz。



安装

接着,您需要执行下面的指令来开始安装。请注意不是docker/目录下的同名文件。
sudo ./install 

如果安装过程顺利的话,您将会看到Successfully built。

启动
安装完成后,您取得了一个镜像。现在您需要建立一个容器,用于运行UOJ:
sudo docker run --name uoj -dit -p 80:80 -p 3690:3690 --cap-add SYS_PTRACE uoj
接下来这个容器将在后台运行。

上面的代码是用于新建一个UOJ,重启服务器后不要使用docker run来启动容器。具体参阅维护文档。
如果您不希望用80端口来运行uoj,您可以把上面的-p 80:80改成-p <port>:80。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-14 21:38:22 | 显示全部楼层
isdkz 发表于 2023-6-14 21:30
没有别人制作好的镜像就只能自己慢慢构建了,步骤有点多,官网有构建教程

我等一下发给你,你先看着搞, ...

估计就是架构不同的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-14 21:47:16 | 显示全部楼层
isdkz 发表于 2023-6-14 21:32
docker已经安装前面的大部分步骤可以忽略

然后把它们放进docker/目录,替换掉jdk-7u76-linux-x64.tar.gz和jdk-8u31-linux-x64.tar.gz。


放进 docker 目录,能不能详细说一说吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-14 21:53:11 | 显示全部楼层
zhangjinxuan 发表于 2023-6-14 21:47
放进 docker 目录,能不能详细说一说吗?


这个得是启动docker容器之后的了,可以通过 docker cp 或者在启动之前做 volume 映射,而且这个是为了支持java的,你不用java可以不用管

先执行这四个文件夹下的 install.sh 构建好镜像再说,分别进这四个目录执行 sh install.sh:
Snipaste_2023-06-14_21-52-33.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 18:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表