在Ubuntu 21主机上运行Docker容器出现问题

93次阅读
没有评论

问题描述

在Ubuntu 21主机上使用Docker时,遇到了一个问题。他已经在Ubuntu 20主机上成功地创建并运行了一个自定义的Docker镜像,但是在Ubuntu 21主机上尝试运行相同的镜像时却遇到了问题。他使用了以下命令来创建和运行容器:

docker run -dit --network=my_docker_network --name=MyContainer local/ubuntu:latest

然而在Ubuntu 21上,这个命令拒绝启动镜像,提示需要提供另一个参数 – COMMAND。即使在命令的最后提供了任何命令,例如:

docker run -dit --network=my_docker_network --name=MyContainer local/ubuntu:latest /usr/bin/sh -c 'echo OK'

或者

docker run -dit --network=my_docker_network --name=MyContainer local/ubuntu:latest /usr/bin/sshd

都会提示命令不在$PATH中或文件不存在。用户尝试了创建容器,它的确被创建了,使用以下命令:

docker create -it --network=my_docker_network --name=MyContainer local/ubuntu:latest

但是一旦尝试启动容器时,同样的问题出现了。用户想知道这是什么问题,他错过了什么。

解决方案

请注意以下操作可能涉及版本差异,务必根据实际情况进行调整。

方案

根据论坛中的答案,正确的导入镜像的方式是使用image load命令,而不是import命令。以下是在Ubuntu 21上正确导入镜像的步骤:

  1. 首先,确保你已经在Ubuntu 20主机上成功创建了自定义的Docker镜像。你可以使用以下命令将该镜像保存为文件:
docker image save local/ubuntu:latest -o ubuntu.tgz
  1. 将保存的镜像文件(ubuntu.tgz)传输到Ubuntu 21主机。

  2. 在Ubuntu 21主机上,使用以下命令来正确导入镜像:

docker image load -i ubuntu.tgz

这将成功导入镜像并使其可用于在Ubuntu 21上运行。

需要注意的是,如果你使用了docker image save命令,镜像的完整名称(repo/name:tag)会与其他信息一起保存。因此,在运行docker image load -i ubuntu.tgz时,Docker会将该镜像标记为在保存时的确切标签。如果存在相同名称的镜像,它将被替换,请务必谨慎操作。

此解决方案的答案来自Docker论坛,感谢那位在Docker论坛上回答了这个问题的用户

正文完