docker 启动容器意外退出
本帖最后由 zhangjinxuan 于 2023-7-27 21:09 编辑容器安装时,遇到了以下问题:
# 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
# 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
启动时,也没有什么报错,就正常启动:
systemctl start docker
docker start uoj
uoj
可是当我查看容器状态的时候,遇到了问题(复制不了,简单说一说大意):
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,一直启动不了,有谁知道这是什么意思吗,怎么解决呢,希望大神解答一下。 本帖最后由 isdkz 于 2023-6-14 20:40 编辑
你中间有做过什么操作吗?
我这里复现不出你那个错误{:10_269:}
isdkz 发表于 2023-6-14 20:38
你中间有做过什么操作吗?
我这里复现不出你那个错误
首先,docker 应该是正常安装了的,然后我就安装了 uoj 容器,全过程如下:
# systemctl restart docker
# 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
# 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
# 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
# docker start uoj
uoj
# 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
# 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'. 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 的启动{:10_257:} zhangjinxuan 发表于 2023-6-14 20:49
请问这条警告:
感觉应该有关,但是在官方文档没有找到相关的说明
# 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: Using a password on the command line interface can be insecure.
mysql: 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 *
你先进交互界面手动执行一下看看输出什么(红色的为执行命令)
本帖最后由 zhangjinxuan 于 2023-6-14 21:09 编辑
isdkz 发表于 2023-6-14 20:59
感觉应该有关,但是在官方文档没有找到相关的说明
# docker run -it uni ...
笑死,终端都进不去:
# 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也不行{:10_291:} zhangjinxuan 发表于 2023-6-14 21:07
笑死,终端都进不去:
应该就是系统架构不对了,我看了一下仓库里只有 amd 架构的,而你的系统是 arm架构的
我先试一下别的方法,等一下发给你
isdkz 发表于 2023-6-14 21:11
应该就是系统架构不对了,我看了一下仓库里只有 amd 架构的,而你的系统是 arm架构的
我先试一下别的 ...
嗯嗯
zhangjinxuan 发表于 2023-6-14 21:13
嗯嗯
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
isdkz 发表于 2023-6-14 21:18
1、安装 git: yum install git
2、把项目克隆下来:git clone https://github.com/UniversalOJ/UOJ- ...
不对,这个方法也不一定行,他的 docker-compose.yml 里面的所有基础镜像都只有amd平台的 isdkz 发表于 2023-6-14 21:23
不对,这个方法也不一定行,他的 docker-compose.yml 里面的所有基础镜像都只有amd平台的
试一试吧,我看也没弹出什么警告,目前感觉良好。 没有别人制作好的镜像就只能自己慢慢构建了,步骤有点多,官网有构建教程
我等一下发给你,你先看着搞,有遇到问题再问
isdkz 发表于 2023-6-14 21:30
没有别人制作好的镜像就只能自己慢慢构建了,步骤有点多,官网有构建教程
我等一下发给你,你先看着搞, ...
好的。现在有点晚了,如果不行就明天继续肝吧{:10_269:} 本帖最后由 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。
isdkz 发表于 2023-6-14 21:30
没有别人制作好的镜像就只能自己慢慢构建了,步骤有点多,官网有构建教程
我等一下发给你,你先看着搞, ...
估计就是架构不同的问题{:10_266:} isdkz 发表于 2023-6-14 21:32
docker已经安装前面的大部分步骤可以忽略
然后把它们放进docker/目录,替换掉jdk-7u76-linux-x64.tar.gz和jdk-8u31-linux-x64.tar.gz。
放进 docker 目录,能不能详细说一说吗? zhangjinxuan 发表于 2023-6-14 21:47
放进 docker 目录,能不能详细说一说吗?
这个得是启动docker容器之后的了,可以通过 docker cp 或者在启动之前做 volume 映射,而且这个是为了支持java的,你不用java可以不用管
先执行这四个文件夹下的 install.sh 构建好镜像再说,分别进这四个目录执行 sh install.sh:
页:
[1]