无法获取bash提示:守护程序错误响应:容器foo未运行

88次阅读
没有评论

问题描述

在使用Docker容器时,遇到了在运行某些容器时无法获取bash提示的问题。具体来说,他使用了一个名为jetty的容器,通过docker exec命令可以获取到bash终端,但当他尝试使用来自Docker Hub的basex容器时,却无法成功获取bash终端,容器似乎也无法正常运行。用户希望知道如何解决这个问题,以及如何正确启动basex容器以获取root bash终端。

解决方案

根据您提供的信息,问题可能涉及到容器的配置、权限问题以及Docker镜像的设计。以下是两种可能的解决方案,您可以根据您的需求选择适合的方法。

方案1:使用正确的容器启动命令

针对basex容器的问题,似乎是镜像内部的配置和启动命令导致容器无法正常运行。您可以尝试使用以下方法来启动basex容器,并获取root bash终端:

docker run -d \
    --name basexhttp \
    --publish 1984:1984 \
    --publish 8984:8984 \
    --entrypoint "" \
    basex/basexhttp:latest /usr/local/bin/basexhttp

这个命令会以后台模式运行basex容器,并使用空的入口点(entrypoint)来启动容器。这样可以避免原有的入口点逻辑,从而解决启动问题。

方案2:手动创建所需目录和设置权限

另一种方法是手动创建容器所需的目录,并设置正确的权限,以确保容器能够正常运行。以下是一个示例命令,您可以根据需要进行调整:

mkdir -p $HOME/basex/data
mkdir -p $HOME/basex/repo
mkdir -p $HOME/basex/webapp
chmod a+w basex
sudo chown -R 1984:1984 $HOME/basex
docker run -d \
    --name basexhttp \
    --publish 1984:1984 \
    --publish 8984:8984 \
    --volume "$HOME/basex/data":/srv/basex/data \
    --volume "$HOME/basex/repo":/srv/basex/repo \
    --volume "$HOME/basex/webapp":/srv/basex/webapp \
    --entrypoint "" \
    basex/basexhttp:latest bash -c "cp -r /usr/src/basex/basex-api/src/main/webapp/WEB-INF /srv/basex/webapp && exec /usr/local/bin/basexhttp"

在这个方法中,我们手动创建了basex容器所需的目录,包括datarepowebapp。然后,我们设置了适当的目录权限,并将所有者设置为1984:1984,以便容器内部的用户可以正常访问这些目录。最后,我们使用修改后的启动命令来运行容器,并在启动前将WEB-INF目录复制到合适的位置,以确保容器正常启动。

验证容器是否正常运行

为了验证容器是否已经正常运行,您可以执行以下命令来查看是否能够获取到bash终端:

docker exec -ti basexhttp basexclient

在终端中,用户名和密码都是admin

请根据您的需求选择其中一种方法,并尝试解决问题。如果问题仍然存在,您可以尝试查看Docker容器的日志,以获取更多有关容器启动失败的信息。如果需要,您还可以尝试使用不同版本的basex/basexhttp镜像,例如basex/basexhttp:9.4.2,以查看是否可以解决问题。如果问题持续存在,您可能需要联系BaseX社区或开发者,寻求更详细的帮助。

请注意,由于容器环境可能会有不同的配置和依赖关系,以上解决方案可能需要根据您的具体情况进行适当的调整。如果涉及到数据和配置的更改,请务必做好备份工作,以免造成数据丢失或不可逆的影响。

正文完