问题
基于 wsl的docker,在启动镜像 databricksdocs/pytest 的时候,出现: 2023-08-26 08:20:51 /bin/bash: line 1: sleep 3600; do :; done: command not found
原因
错误提示表明,Docker在尝试运行/bin/bash: line 1: sleep 3600; do :; done这条命令时遭遇了问题。这条命令看起来似乎是个无限循环,但其实有些部分写错了。
正确的无限循环应该是这样的:
while true; do sleep 3600; done
或者简单点:
sleep infinity
解决
Dockerfile
- 如果你是在
Dockerfile里使用CMD或ENTRYPOINT指定的命令,确保修正为:
CMD ["bash", "-c", "while true; do sleep 3600; done"]
或者
CMD ["sleep", "infinity"]
docker run
- 如果你是通过
docker run来指定命令的,确保修正为:
docker run <your-image-name> bash -c "while true; do sleep 3600; done"
或者
docker run <your-image-name> sleep infinity
修正后再尝试启动容器应该就没问题了。
后记
Docker 的 inspect 命令为提供了关于容器的详细信息。这些信息以 JSON 格式呈现,并涵盖了容器的各个方面。以下是一部分输出内容的解释:
-
Id:
- 这是容器的唯一标识符。你可以使用这个ID来引用或管理容器。
-
Created:
- 这是容器创建的时间。
-
Path:
- 当容器启动时要运行的主命令(通常是在 Dockerfile 中通过 CMD 或 ENTRYPOINT 指定的命令)。
-
Args:
- 与主命令(Path)关联的参数列表。在这里,它是尝试运行
bash命令并接受-c作为参数,后面跟着'sleep 3600; do :; done',这显然是个语法错误。
- 与主命令(Path)关联的参数列表。在这里,它是尝试运行
-
State:
- 这部分提供了容器的当前状态信息:
- Status: 容器的状态,如 "running"、"exited" 等。
- Running: 布尔值,指示容器是否正在运行。
- Paused: 布尔值,指示容器是否已暂停。
- Restarting: 布尔值,指示容器是否正在重新启动。
- OOMKilled: 布尔值,表示容器是否因为内存不足而被杀死。
- Dead: 布尔值,表示容器是否死掉。
- Pid: 容器的进程 ID。如果容器没有运行,此值为0。
- ExitCode: 容器退出时的代码。正常退出为0,否则表示出现错误。在你的情况下,它是127,这通常意味着命令没有找到。
- Error: 如果在容器内部有错误发生,这里会显示相关的错误信息。
- StartedAt: 容器最后一次启动的时间。
- FinishedAt: 容器最后一次停止的时间。
- 这部分提供了容器的当前状态信息:
从 inspect 中,我们可以看到容器尝试运行一个语法错误的命令,因此它已经退出,返回了错误代码127。