问题描述
在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上正确导入镜像的步骤:
- 首先,确保你已经在Ubuntu 20主机上成功创建了自定义的Docker镜像。你可以使用以下命令将该镜像保存为文件:
docker image save local/ubuntu:latest -o ubuntu.tgz
-
将保存的镜像文件(
ubuntu.tgz
)传输到Ubuntu 21主机。 -
在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论坛上回答了这个问题的用户。
正文完