使用Docker启动容器而不指定命令

zzlelutf  于 2023-02-03  发布在  Docker
关注(0)|答案(4)|浏览(222)

我对LXC很熟悉,想试试docker,但我遇到的问题是,我找不到一种方法,让docker在后台启动一个容器,而不执行命令。例如,对于LXC,我会这样做:
lxc create -t ubuntu -n my_container
lxc-start -n my_container -d
在这一点上,我将有一个运行的容器,我可以使用任何虚拟机(ssh到它,安装东西在它...)似乎docker防止这种用法。

mw3dktmi

mw3dktmi1#

当我需要检查我创建的Docker容器在运行Docker文件中的正常CMD时出现问题时,我会注解掉该命令,并替换为“sleep”命令,以便在容器启动时暂停容器,这样我就可以登录到它并检查安装。
在停靠文件中

CMD ["sleep","3600"]

登录正在运行的Docker示例

docker exec -i -t <Container ID> bash
k4aesqcs

k4aesqcs2#

使用Docker,在CLI中,如果不运行命令,就无法创建容器。如果要使用REST API,可以调用'create'端点而不使用'start'。
不过,我想这对你没什么好处。
在大多数情况下,您可能只想使用bash docker run -t -i ubuntu bash运行一个容器,并在那里执行一些操作。一旦您完成了所需的所有操作,就可以提交并从此处运行。
不过通常情况下,为了保持清晰的历史记录,最好一次做一步。看看Docker Builder:)

pcww981p

pcww981p3#

您可以构建一个Docker映像,其中包含一个运行命令和其他配置,例如docker run <image>将启动容器。最简单的方法是使用Docker Builder中的CMD。您需要Docker的最新版本(〉0.4.6?)。
除了使用Docker Builder之外,还可以查看docker commitdocker run的标志(其中命令参数是可选的)。

ozxc1zmp

ozxc1zmp4#

在这里添加一些想法,因为我自己也在玩这个。
假设我想使用3个Docker容器:

blong@mycomputer:~$ docker run --name ubuntuContainer1 -itd ubuntu 
2ce602710fb9b84b6530e5a1072961627e91731aba8f8b019f346fc78df08d7c
blong@mycomputer:~$ docker run --name ubuntuContainer2 -itd ubuntu 
e32b0eb72456fc23222f3915c91afc77e06a7e37a073b11f7088fabe8fa4bf20
blong@mycomputer:~$ docker run --name ubuntuContainer3 -itd ubuntu 
40574f704dceb0378f48ebe01d014d598434093d649be13573911d9833d9825d

确保它们一直运行,即使我没有明确要求运行/bin/bash

blong@mycomputer:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
40574f704dce        ubuntu              "/bin/bash"         2 seconds ago       Up 1 seconds                            ubuntuContainer3
e32b0eb72456        ubuntu              "/bin/bash"         5 seconds ago       Up 4 seconds                            ubuntuContainer2
2ce602710fb9        ubuntu              "/bin/bash"         8 seconds ago       Up 7 seconds                            ubuntuContainer1

我可以把子弹射进容器里

blong@mycomputer:~$ docker attach ubuntuContainer1
root@2ce602710fb9:/#

我可以在容器中执行命令(例如安装软件包)

root@2ce602710fb9:/# apt-get update

# ... omitting output

root@2ce602710fb9:/# apt-get install nodejs
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libc-ares2 libv8-3.14.5
The following NEW packages will be installed:
  libc-ares2 libv8-3.14.5 nodejs
0 upgraded, 3 newly installed, 0 to remove and 5 not upgraded.
Need to get 1912 kB of archives.
After this operation, 7538 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y

# ... omitting output

Processing triggers for libc-bin (2.19-0ubuntu6.6) ...
root@2ce602710fb9:/# nodejs --version
v0.10.25

然后,我可以退出,并通过按CTRL-p和CTRL-q保持一切运行

root@2ce602710fb9:/# blong@mycomputer:~/$ 
blong@mycomputer:~/$

另见:

相关问题