当前位置: 首页 > 知识库问答 >
问题:

在Docker Alpine容器中启动一个外壳

陶博涉
2023-03-14

要为Ubuntu映像启动交互式shell,我们可以运行:

ole@T:~$ docker run -it --rm ubuntu
root@1a6721e1fb64:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

但当对Alpine Docker图像运行此操作时,会产生以下结果:

ole@T:~$ docker run -it --rm alpine
Error response from daemon: No command specified

在Alpine base容器中启动交互式shell的命令是什么?

共有3个答案

宦飞
2023-03-14

如今,默认情况下,高山图像将直接引导到/bin/sh中,而无需指定要执行的shell:

$ sudo docker run -it --rm alpine  
/ # echo $0  
/bin/sh  

这是因为alpineimage Dockerfiles现在包含一个CMD命令,该命令指定容器启动时要执行的shell:CMD[“/bin/sh”]

在较旧的阿尔卑斯山图像版本(2017年之前)中,未使用CMD命令,因为Docker曾为CMD创建一个附加层,这导致图像大小增加。这是阿尔卑斯山图像开发者想要避免的事情。在最近的Docker版本(1.10)中,CMD不再占据一个图层,因此它被添加到alpine图像中。因此,只要不覆盖CMD,最近的Alpine图像就会引导到/bin/sh

如需参考,请参阅Glider Labs对官方阿尔卑斯码头文件的以下promise:
https://github.com/gliderlabs/docker-alpine/commit/ddc19dd95ceb3584ced58be0b8d7e9169d04c7a3#diff-db3dfdee92c17cf53a96578d4900cb5b

东方飞捷
2023-03-14

通常,阿尔卑斯山Linux图像不包含bash,相反,您可以使用/bin/ash/bin/shash或仅sh

/垃圾箱/灰烬

docker run -it --rm alpine /bin/ash

/垃圾箱/垃圾箱

docker run -it --rm alpine /bin/sh

docker run -it --rm alpine ash

docker run -it --rm alpine sh

我希望这些信息对你有所帮助。

楚钊
2023-03-14
ole@T:~$ docker run -it --rm alpine /bin/ash
(inside container) / # 

上面使用的选项:

  • /bin/ash是BusyBox提供的ash(Almquist Shell)
 类似资料:
  • 问题内容: 我想在Centos7的Docker容器中运行Jenkins。我看到了Jenkins的官方文档:首先,从Docker存储库中提取官方的jenkins映像。 接下来,使用该映像运行一个容器,并将数据目录从该容器映射到主机;例如,在下面的示例中,容器中的/ var / jenkins_home从主机上的当前路径映射到jenkins /目录。Jenkins 8080端口也以49001的身份向主

  • 我们有一个公开REST API的现有java应用程序。当它收到超文本传输协议请求时,它使用Runtime.getRuntime(). exe启动另一个java进程。 我们正在将此应用程序迁移到docker,我们希望将这些服务、一个容器中的REST应用程序和另一个容器中的其他组件分开。 有没有办法,REST应用程序可以在另一个docker容器中启动另一个应用程序?

  • 我正在尝试在列表视图中启动一个新的活动。 当它下降到开始活动(意图)时,我可以通过调试器看到意图中的正确值。但是,当我在ItemDetail活动中执行getIntent()时,该意图没有值。mMap为空。 访问临时演员的代码是 这是怎么回事?我没有抓住正确的意图吗?我的价值观是如何丢失的?

  • 问题内容: 要为Ubuntu映像启动交互式shell,我们可以运行: 但是,对于Alpine Docker映像运行此命令时,将得到以下结果: 在Alpine基本容器中启动交互式Shell的命令是什么? 问题答案: 上面使用的选项: 是BusyBox提供的Ash(Almquist Shell)。 退出时自动移除容器() 交互模式(即使未连接也保持STDIN打开) 分配伪TTY

  • 根据这个github问题,应该可以用Upstart、cron等和Docker0.6或更高版本启动一个完整的容器,但我该如何做呢? 我在期待 就像 我会得到一个登录屏幕,但它没有显示任何内容。我也尝试使用ssh访问它,但没有成功。我正在使用Docker索引中的默认ubuntu图像。