相关疑难解决方法(0)

为什么一些docker镜像在运行时需要命令?

我发现在使用时docker run我有时不需要添加"命令",而有时候"命令"是必须的.例如,在运行ubuntu映像时,不需要命令:

# docker run ubuntu
#
Run Code Online (Sandbox Code Playgroud)

在运行时mstormo/suse:

# docker run mstormo/suse
Error response from daemon: No command specified
# docker run mstormo/suse bash
#
Run Code Online (Sandbox Code Playgroud)

那么这与指定的图像有关吗?

docker

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

入口点:“entrypoint.sh” - docker compose

entrypoint.sh我的工作区中没有这样的文件名。

但下面的指令docker-compose.yml是指它:

builder: 
  build: ../../
  dockerfile: docker/dev/Dockerfile
  volumes:
    - ../../target:/wheelhouse
  volumes_from:
    - cache
  entrypoint: "entrypoint.sh"
  command: ["pip", "wheel", "--non-index", "-f /build", "."]
Run Code Online (Sandbox Code Playgroud)

哪里../docker/dev/Dockerfile

# Set defaults for entrypoint and command string
ENTRYPOINT ["test.sh"]
CMD ["python", "manage.py", "test", "--noinput"]
Run Code Online (Sandbox Code Playgroud)

什么是entrypoint: "entrypoint.sh"真正做到?

docker dockerfile docker-compose docker-entrypoint docker-command

8
推荐指数
1
解决办法
2万
查看次数

将参数传递给Docker容器

我创建了一个集装箱码头.哪个应该给出以下内容:

docker run --rm container1
> Hello World!

docker run --rm container1 Bob
> Hello Bob!
Run Code Online (Sandbox Code Playgroud)

我的Dockerfile:

FROM ubuntu:14.04
ENTRYPOINT ["/bin/echo", "Hello"]
CMD ["World!"]
Run Code Online (Sandbox Code Playgroud)

我的输出:

docker run --rm container1
> Hello World!

docker run --rm container1 Bob
> Hello Bob
Run Code Online (Sandbox Code Playgroud)

我有一个损失"!"

docker

7
推荐指数
2
解决办法
1万
查看次数

Dockerfile 中是否需要提及 CMD 或 ENTRYPOINT?

我已阅读有关 CMD 和 ENTRYPOINT 的文档

https://docs.docker.com/engine/reference/builder/#entrypoint

在这里,他们在表中提到“不允许使用 CMD 和 NO ENTYRPOINT”,但是我创建了一个没有 CMD 和 ENTRYPOINT 的 Dockerfile,并且镜像构建成功。下载高山焦油从这里高山焦油

文件

from scratch 
ADD alpine-minirootfs-3.11.2-x86_64.tar.gz /
COPY . /
Run Code Online (Sandbox Code Playgroud)

构建图像:

docker build -t test:1 .
Sending build context to Docker daemon  2.724MB
Step 1/3 : from scratch
-----
Successfully tagged test:1

docker run -ti test:1 /bin/sh
/ # 
Run Code Online (Sandbox Code Playgroud)

有效!!那么为什么在文档中提到 CMD 或 ENTRYPOINT 是必要的?

docker dockerfile

7
推荐指数
2
解决办法
3883
查看次数

Docker在启动容器上编写并执行命令

我试图了解docker compose中的COMMAND选项.在我目前的docker-compose.yml中,我启动了韵文docker镜像(https://github.com/prosody/prosody-docker),我想在实际启动容器时创建一个用户列表.

容器的文档说明可以使用环境选项来创建用户LOCAL, DOMAIN, and PASSWORD,但这只是一个用户.我需要一个用户列表.

当阅读互联网上的一些东西时,似乎使用命令选项我应该能够在启动或运行容器中执行命令.

xmpp:
    image: prosody/prosody
    command: prosodyctl register testuser localhost testpassword
    ports:
        - "5222:5222"
        - "127.0.0.1:5347:5347"
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用,我检查运行容器使用docker exec -it <imageid> bash但没有创建用户.

是否可以使用docker-compose在已启动的容器上执行命令,还是有其他选项?

docker boot2docker

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

无法在Windows IIS Docker容器中启动交互式会话

我正在使用AWS"带有容器的Windows Server 2016 Base"映像(ami-5e6bce3e).

使用docker info我可以确认我有最新的(服务器版本:1.12.2-cs-ws-beta).

从Powershell(以管理员身份运行),我可以在交互模式下成功运行"microsoft/windowsservercore"容器,连接到容器中的CMD:

docker run -it microsoft/windowsservercore cmd
Run Code Online (Sandbox Code Playgroud)

当我尝试以交互模式运行"microsoft/iis"容器时,虽然我能够连接到IIS(通过浏览器),但我从未连接到容器中的交互式CMD会话.

docker run -it -p 80:80 microsoft/iis cmd
Run Code Online (Sandbox Code Playgroud)

相反,我只是得到:

服务'w3svc'开始了

使用另一个Powershell窗口,我可以:

docker container ls
Run Code Online (Sandbox Code Playgroud)

...并看到我的容器正在运行.

试图附加锁定而永不返回.

我已经切换了区域,发现每个区域都有不同的AMI:

  • us-east-1:ami-d08edfc7
  • us-west-2:ami-5e6bce3e

......这两个都有相同的结果.

使用的相关链接:

更新

使用以下链接,我能够基于服务器基础创建自己的Dockerfile并安装IIS,这似乎工作正常.

自定义Dockerfile

amazon-web-services docker windows-server-2016

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

为什么Docker中httpd容器会立即退出而没有任何错误

我是 Docker 新手。我的 Dockerfile(从教程中获得)是:

\n\n
FROM ubuntu\n\nENV DEBIAN_FRONTEND noninteractive\n\nRUN apt-get update \\\n&& apt-get install -y --no-install-recommends apache2 \\\n                        libapache2-mod-jk\nVOLUME ["/var/log/apache2"]\nRUN echo \'ServerName localhost\' >> /etc/apache2/apache2.conf\nEXPOSE 80 443\n\nENTRYPOINT ["apache2ctl", "-D", "FOREGROUND"]\n
Run Code Online (Sandbox Code Playgroud)\n\n

我给了docker build -t mg:httpd apache\\。没有错误。

\n\n
\xce\xbb docker images\nREPOSITORY          TAG                 IMAGE ID            CREATED                SIZE\nmg                  httpd               262d7a4f85fc        About an hour ago      248MB\n
Run Code Online (Sandbox Code Playgroud)\n\n

docker run -it mg:httpd

\n\n

没有错误,但光标立即返回到命令提示符。继续Unable to connect服用http://localhost/浏览器。

\n\n
\xce\xbb docker ps -a\nCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS                \n600231bbd461        mg:httpd …
Run Code Online (Sandbox Code Playgroud)

docker dockerfile docker-compose

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

Docker compose - R 服务器 - 致命错误:必须指定“--save”、“--no-save”或“--vanilla”

我遇到了 docker-compose 的问题。我是 docker 的新手。

我可以成功构建我的 R 服务器。这是 Dockerfile:

FROM ubuntu:16.04

RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
RUN echo "deb http://cran.r-project.org/bin/linux/ubuntu trusty/" |  tee -a /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y curl libcurl4-openssl-dev
RUN apt-get install -y apt-utils

RUN apt-get install -y r-base
RUN apt-get install -y r-base-dev
RUN apt-get install -y libssl-dev

ENTRYPOINT ["/usr/bin/R"]
Run Code Online (Sandbox Code Playgroud)

这是我的 docker compose 文件,其中有一个需要调用 R 的 python 工作服务器:

version: '3'
services:
  worker:
    build: .
    image: mtm/mtm-worker-server
  r-server: …
Run Code Online (Sandbox Code Playgroud)

r docker dockerfile docker-compose

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

Jenkins docker容器总是添加cat命令

我正在创建用于在Docker容器上运行Terraform的Jenkins管道。

这是我的管道脚本。

pipeline {
    agent {
        docker {
            image 'hashicorp/terraform:full'
            args '--entrypoint=/bin/bash'
        }
    }
    stages {
        stage('execute') { 
            steps {
                sh 'terraform --version' 
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在詹金斯上运行此管道时,出现以下错误。

$ docker run -t -d -u 995:993 --entrypoint=/bin/bash -w /var/lib/jenkins/workspace/terraform -v /var/lib/jenkins/workspace/terraform:/var/lib/jenkins/workspace/terraform:rw,z -v /var/lib/jenkins/workspace/terraform@tmp:/var/lib/jenkins/workspace/terraform@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** …
Run Code Online (Sandbox Code Playgroud)

jenkins docker terraform jenkins-pipeline

5
推荐指数
2
解决办法
1157
查看次数

SCRATCH 中的 docker 容器如何执行二进制文件?

docker 文档说你可以构建这个最小的镜像:

FROM scratch
ADD hello /
CMD ["/hello"]
Run Code Online (Sandbox Code Playgroud)

据推测,其工作方式是该CMD步骤使用默认 shell(即,bin/sh根据/sf/answers/1509549331/)来运行hello可执行文件。

但如果 SCRATCH 真的完全是空的,那么它从哪里来呢bin/sh?为什么我的图像包含外壳?

shell docker

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