docker - Docker Ubuntu 选择了错误的目录
问题描述
我对 Docker 还很陌生,并试图通过尝试在其中运行 Steam 服务器来熟悉自己。
我的 Dockerfile 如下:
FROM ubuntu:20.10
RUN dpkg --add-architecture i386 \
&& apt-get update \
&& apt-get install -y \
curl \
ca-certificates \
libgcc1 \
&& apt-get clean autoclean \
&& apt-get autoremove -y \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p steam/cmd \
&& cd steam \
&& curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf - -C cmd
RUN ./steam/cmd/steamcmd.sh +quit
我无法弄清楚为什么最后一步会引发此错误:
Step 4/4 : RUN ./steam/cmd/steamcmd.sh +quit
---> Running in c3f673328fe6
./steam/cmd/steamcmd.sh: line 37: /steam/cmd/linux32/steamcmd: No such file or directory
The command '/bin/sh -c ./steam/cmd/steamcmd.sh +quit' returned a non-zero code: 127
为什么会./steam/cmd/steamcmd.sh
被翻译成/steam/cmd/linux32/steamcmd
?
步骤 3/3 没有放在steamcmd.sh
里面linux32
。
Step 3/4 : RUN mkdir -p steam/cmd && cd steam && curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf - -C cmd
---> Running in fa5dcd1fcadc
steamcmd.sh
linux32/steamcmd
linux32/steamerrorreporter
linux32/libstdc++.so.6
linux32/crashhandler.so
使用WORKDIR steam/cmd
then 跟进它RUN
也会返回相同的结果。
解决方案
请参阅此讨论:https ://askubuntu.com/questions/133389/no-such-file-or-directory-but-the-file-exists
尝试apt install libc6-i386
作为步骤 2 的一部分进行。
RUN dpkg --add-architecture i386 \
&& apt-get update \
&& apt-get install -y \
curl \
ca-certificates \
libgcc1 \
libc6-i386 \
&& apt-get clean autoclean \
&& apt-get autoremove -y \
&& rm -rf /var/lib/apt/lists/*
同样jfyi,该sh
文件并没有像您想象的那样被“翻译”。
如果你真的打开它sh
,你会看到它试图调用linux32
可执行文件(它调用它$STEAMEXE
)。
如果你想自己解决这样的问题,我是这样调查的:
- 我复制了您的 dockerfile,但注释/删除了最后一个(损坏的)步骤。
- 我用
docker build -t helpthiscoder .
- 我得到了图像
docker start helpthiscoder; docker run -i -t helpthiscoder bash
- 我查看
sh
了图像上的文件。apt update; apt install vim; vim /steam/cmd/steamcmd.sh
. - 在这个文件中,我添加了我自己的
echo $STEAMEXE
以查看路径是/steam/cmd/linux32/steamcmd
. - 我
/steam/cmd/linux32
跑过去ls -lah
查看该文件是否存在且可执行。 - 我跑去
file steamcmd
获取信息。然后我看到它是32位的。 - 然后我用谷歌搜索
linux 32-bit file not found error Ubuntu 20
并找到了我在第一段中提到的链接。:/
我现在得到一个不同的错误:
Redirecting stderr to '/root/Steam/logs/stderr.txt'
threadtools.cpp (3787) : Assertion Failed: Probably deadlock or failure waiting for thread to initialize.
ILocalize::AddFile() failed to load file "public/steambootstrapper_english.txt".
[ 0%] Checking for available update...
threadtools.cpp (3787) : Assertion Failed: Probably deadlock or failure waiting for thread to initialize.
Thread failed to initialize
CWorkThreadPool::StartWorkThread: Thread creation failed.
Exiting on SPEW_ABORT
我会继续研究它。我强烈建议您删除最后一条断线并构建一个您可以按照我上面提到的方式“探索”的图像。这就是我得到这个新错误的方式。
推荐阅读
- asp.net - 我看到这个错误 ORA-01722: invalid number when I want to insert data to oracle database table
- vhdl - 我们可以在模拟器中强制用户定义数据类型的值吗?
- sql - MS Access - 文本字段返回查询字符串而不是查询结果值
- wpf - 如何从选项卡按钮启用禁用主窗口的菜单项
- c# - 为多个类提供附加功能
- service-worker - Workbox - 服务工作者 index.html/asset 不匹配
- sql - plsql - 动态更改游标中的表名
- dhtmlx - DHTMLX。如何从数据库中查询列表单位?
- docker - 直接连接两个docker容器
- vue.js - 函数在 NuxtJs 中只被调用一次