我正在用docker做一些复杂的事情,但结果我不知道-it标志是什么意思.最近我遇到了一些令docker run我困惑的命令的例子.
docker run -itd ubuntu:xenial /bin/bash
Run Code Online (Sandbox Code Playgroud)
我的问题是-it,如果在实例化期间运行容器,那么在这里写标志是有意义的bin/bash
在文档中我们有一个例子
docker run --name test -it debian
Run Code Online (Sandbox Code Playgroud)
有解释
-it指示Docker分配连接到容器的stdin的伪TTY; 在容器中创建交互式bash shell.
和帮助页面中-t标志的说明
-t, - try分配伪TTY
如果我删除-it标志期间
docker run -d ubuntu:xenial /bin/bash
Run Code Online (Sandbox Code Playgroud)
我新创建的容器并没有那么多
在 docker ps -a
它被指定为退出
对不起,如果我的问题很愚蠢,我在互联网上找不到解释(我对这一点有很大的误解).
我想用docker-compose启动服务并保持容器运行,这样我就可以通过'docker inspect'获取它的IP地址.但是,容器在启动后总是立即退出.
我试图将"command:["sleep","60"]"和其他东西添加到docker-compose.yml但是每当我用"command:..."添加行时我都不能称之为"docker-compose up"因为我将收到消息"无法启动容器.....系统错误:无效字符'k'寻找值的开头"
我也尝试将"CMD sleep 60"和诸如此类的东西添加到Dockerfile本身,但这些命令似乎没有被执行.
有没有一种简单的方法来保持容器存活或修复我的一个问题?
编辑:这是我想要运行的撰写文件:
version: '2'
services:
my-test:
image: ubuntu
command: bash -c "while true; do echo hello; sleep 2; done"
Run Code Online (Sandbox Code Playgroud)
它运行正常如果我在OS X下使用docker-compose启动它,但是如果我在Ubuntu 16.04下尝试相同它会给我上面的错误消息.
如果我尝试使用Dockerfile的方法,Dockerfile看起来像这样:
FROM ubuntu:latest
CMD ["sleep", "60"]
Run Code Online (Sandbox Code Playgroud)
哪个似乎什么也没做
编辑2:我必须纠正自己,原来这是与Dockerfile和docker-compose.yml相同的问题:每次我将"CMD ..."添加到Dockerfile或添加"命令..."到撰写文件,我得到错误的无效字符.如果我删除这两个命令,它可以完美地工作.
我有一台 m1 mac,我正在尝试在基于 arm64 的主机平台上运行基于 amd64 的 docker 映像。但是,当我尝试这样做时(使用 docker run),我收到以下错误:
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested.
Run Code Online (Sandbox Code Playgroud)
当我尝试添加标签时--platform linux/amd64,错误消息没有出现,但我似乎无法进入相关的 shell 并docker ps -a显示容器在启动时立即退出。有谁知道在这种情况下我如何在我的机器上运行这个精确的图像/如何使--platform标签工作?
所以在开始这个问题之前,我是对码头工作者的理解.
现在Images是创建容器的映像,Dockerfile就像流程一样.简单来说,图像是类,容器是图像的对象.
现在,我不想采用Dockerfile您在创建容器时指定要执行的步骤的方法.
我想通过Linux安装一些基本实体,如MongoDb,Redis等,并在我们的服务器上运行.
所以我开始这样:
我从Docker Hub下载了Ubuntu映像,通过docker pull ubuntu
它返回了我18261df960118..7a16(big hex key)
现在我必须为这个图像创建一个容器,以实现我所做的:
docker create -h abc.com --name abc.com 18261df960118..7a16
它返回了我的容器ID.
docker start containerId遵循的docker attach containerId.但每次它说:
您无法附加到已停止的容器,请先启动它.
请帮助我做错的地方,对于很多人来说这可能是一个新手的问题,但是我被困在这里,请不要为此做出请求.
提前致谢.
我正在使用 Windows Server 2016 来启动windowsservercoredocker 容器,并注意到我认为不正确的行为,即容器很快退出,即使它应该休眠超过 15 分钟。我有以下内容Dockerfile:
FROM microsoft/windowsservercore
RUN powershell Start-Sleep -s 1000
Run Code Online (Sandbox Code Playgroud)
docker build -t mybuild .我使用when构建容器与Dockerfile. 然后我运行容器docker run mybuild,它很快就退出了。
看看这个答案,似乎睡眠应该让容器保持活力。这个答案显示的是 Linux,所以不确定这是否重要,但我觉得睡眠进程在任何一种情况下都在运行,这就是决定容器是否应该默认退出的原因
如果我使用交互模式和/或(我尝试了所有 3 种组合) tty ( docker run -it mybuild),它会一直保持状态,直到我退出容器的 shell
查看 docker 文档run会在前台执行容器(如 -it ),尽管我不明白为什么这很重要,因为无论容器是否分离,进程都应该仍在运行。我还尝试以分离模式运行它docker run -d,在这种情况下它也很快退出。
我还尝试在睡眠后运行另一个命令,但仍然不起作用。docker 文件如下所示:
FROM microsoft/windowsservercore
RUN powershell Start-Sleep -s 1000
RUN echo "hello" > C:\hello.txt
Run Code Online (Sandbox Code Playgroud)
我查看了dockerfile 参考RUN,它说以 shell 形式在 Windows …