小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
一键安装ros:noetic+docker成功后docker image不同步显示镜像
-
wen@wenubuntu:~$ sudo docker pull fishros2/ros:noetic-desktop-full
noetic-desktop-full: Pulling from fishros2/ros
Digest: sha256:4a7705e75022cc5ff60cecb7b5b40bc16492e94b1391a82ab1dda93ab1436b4c
Status: Image is up to date for fishros2/ros:noetic-desktop-full
docker.io/fishros2/ros:noetic-desktop-full
wen@wenubuntu:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
osrf/ros noetic-desktop-full 5a2576cc4b0d 5 weeks ago 3.44GB
ubuntu latest 35a88802559d 2 months ago 78.1MB
ubuntu 20.04 5f5250218d28 2 months ago 72.8MB
ros noetic-robot 196b21611ecc 3 years ago 983MB -
从您提供的信息来看,您尝试拉取的 Docker 镜像
fishros2/ros:noetic-desktop-full
实际上已经是最新的,因为 Docker 报告说“Image is up to date”。但是,当您列出 Docker 镜像时,显示的osrf/ros:noetic-desktop-full
镜像与您尝试拉取的镜像名称不匹配。这可能是因为您之前已经安装了osrf/ros:noetic-desktop-full
镜像,或者您的系统中有某种配置或别名指向了不同的镜像。要解决这个问题,您可以按照以下步骤操作:
-
确认镜像名称:
确保您想要使用的镜像名称是fishros2/ros:noetic-desktop-full
。如果您之前使用的是osrf/ros:noetic-desktop-full
,并且现在想要切换到fishros2/ros
,那么您需要确保所有引用都更新为新的镜像名称。 -
删除旧的镜像(可选):
如果您确定不再需要osrf/ros:noetic-desktop-full
镜像,可以删除它以释放空间并避免混淆。使用以下命令删除镜像:sudo docker rmi osrf/ros:noetic-desktop-full
-
重新拉取正确的镜像:
如果您已经确认或更改了镜像名称,并且想要确保您使用的是最新的fishros2/ros:noetic-desktop-full
镜像,可以再次尝试拉取它(尽管 Docker 已经告诉您它是最新的):sudo docker pull fishros2/ros:noetic-desktop-full
-
检查镜像列表:
拉取后,再次列出 Docker 镜像以确认fishros2/ros:noetic-desktop-full
已被正确拉取:sudo docker images
-
使用新镜像运行容器:
现在,您可以使用新的镜像来运行 ROS Noetic 容器。例如:sudo docker run -it --name ros_noetic fishros2/ros:noetic-desktop-full
-
检查 Docker 配置(如果问题持续存在):
如果问题仍然存在,检查您的 Docker 配置或任何可能影响 Docker 镜像名称解析的别名或环境变量。
通过这些步骤,您应该能够解决 Docker 镜像名称不匹配的问题,并开始使用您期望的 ROS Noetic 镜像。
以上为生成回答,仅供参考~
-
-
@2944197166 输入指令控制显示Error response from daemon: No such container: noetic1
Error: failed to start containers: noetic1 -
@小伊 要docker run 才能产生容器
-
是的,
docker run
命令是 Docker 中用于创建并启动一个容器的核心命令。当你执行docker run
时,Docker 会根据你的请求查找或下载指定的镜像(如果本地没有的话),然后基于这个镜像创建一个新的容器实例并启动它。docker run
命令的基本语法如下:docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
OPTIONS
:是一些可选参数,用于控制容器的运行方式,比如-d
用于后台运行容器,--name
用于指定容器的名称,-p
用于端口映射等。IMAGE[:TAG|@DIGEST]
:指定了要运行的镜像,可以通过标签(:TAG
)或摘要(@DIGEST
)来指定镜像的具体版本。如果不指定标签,则默认使用latest
标签。[COMMAND] [ARG...]
:这是传递给容器内部运行命令的参数,如果镜像内部有默认命令,则可以覆盖它。
举个例子,如果你想在后台运行一个 Ubuntu 容器,并且希望进入容器的 shell,你可以这样做:
- 首先,运行容器但不直接进入 shell(使用
-d
参数):
docker run -d --name ubuntu_container ubuntu
这会创建一个名为
ubuntu_container
的 Ubuntu 容器,并在后台运行。但是,因为 Ubuntu 镜像的默认命令是启动 bash,但因为我们使用了-d
参数,所以 bash 会立即退出,容器内部实际没有长时间运行的进程,但容器仍然会存在。- 然后,你可能需要进入这个容器,可以使用
docker exec
命令:
docker exec -it ubuntu_container bash
这会连接到
ubuntu_container
容器,并在其中启动一个新的 bash 会话。如果你想在启动容器时就直接进入 shell,可以直接在
docker run
命令中指定命令:docker run -it --name ubuntu_interactive ubuntu bash
这里,
-it
参数用于分配一个伪终端(-t
)并保持 STDIN 开放(-i
),使得我们能够与容器中的 bash 会话进行交互。容器创建后会立即进入 bash。
以上为生成回答,仅供参考~