相关疑难解决方法(0)

什么是docker run -it flag?

我正在用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 dockerfile

64
推荐指数
4
解决办法
3万
查看次数

Docker Compose保持容器运行

我想用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或添加"命令..."到撰写文件,我得到错误的无效字符.如果我删除这两个命令,它可以完美地工作.

docker docker-compose

42
推荐指数
9
解决办法
4万
查看次数

如何在 arm64 主机平台上运行 amd64 docker 镜像

我有一台 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标签工作?

macos containers x86-64 docker apple-silicon

6
推荐指数
2
解决办法
5400
查看次数

Docker刚刚启动后就退出了

所以在开始这个问题之前,我是对码头工作者的理解.

  1. Docker有3个组件
  2. 图片
  3. 集装箱
  4. Dockerfile

现在Images是创建容器的映像,Dockerfile就像流程一样.简单来说,图像是类,容器是图像的对象.

现在,我不想采用Dockerfile您在创建容器时指定要执行的步骤的方法.

我想通过Linux安装一些基本实体,如MongoDb,Redis等,并在我们的服务器上运行.

所以我开始这样:

  1. 我从Docker Hub下载了Ubuntu映像,通过docker pull ubuntu 它返回了我18261df960118..7a16(big hex key)

  2. 现在我必须为这个图像创建一个容器,以实现我所做的:

    docker create -h abc.com --name abc.com 18261df960118..7a16

它返回了我的容器ID.

  1. 为了进入容器,我必须首先启动它然后连接到它,所以这里是命令所docker start containerId遵循的docker attach containerId.

但每次它说:

您无法附加到已停止的容器,请先启动它.

请帮助我做错的地方,对于很多人来说这可能是一个新手的问​​题,但是我被困在这里,请不要为此做出请求.

提前致谢.

docker dockerfile

3
推荐指数
1
解决办法
1105
查看次数

为什么 Windows docker 容器在 sleep 命令完成之前提前退出?

我正在使用 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 …

docker docker-for-windows

1
推荐指数
1
解决办法
2687
查看次数