首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker镜像运行错误的命令

Docker镜像运行错误的命令
EN

Stack Overflow用户
提问于 2019-05-24 06:14:37
回答 1查看 153关注 0票数 0

什么会导致Docker映像无法运行其docker-compose.yaml文件中指定的命令?

我有一个Dockerfile,如下所示:

代码语言:javascript
复制
FROM python:2.7
ENV PYTHONUNBUFFERED 1

RUN mkdir -p /code
WORKDIR /code
COPY ./pip-requirements.txt pip-requirements.txt
COPY ./code /code/

RUN pip install --trusted-host pypi.python.org -r pip-requirements.txt

和一个docker-compose.yaml文件,如下所示:

代码语言:javascript
复制
version: '3'
services:
  worker:
    container_name: myworker
    image: registry.gitlab.com/mygitlabuser/mygitlabproject:latest
    network_mode: host
    build:
        context: .
        dockerfile: Dockerfile
    command: ./myscript.py --no-wait --traceback

如果我使用以下命令在本地构建和运行此程序:

代码语言:javascript
复制
docker-compose -f docker-compose.yaml up

脚本运行几分钟后,我得到了预期的输出。运行docker ps -a会显示一个名为"myworker“的容器已经创建,正如预期的那样。

现在,我希望将此映像上传到存储库,并通过在远程服务器上下载并运行它来将其部署到生产环境中。

我使用以下命令重新构建映像:

代码语言:javascript
复制
docker-compose -f docker-compose.yaml build

然后通过以下方式上传:

代码语言:javascript
复制
docker login registry.gitlab.com
docker push registry.gitlab.com/myuser/myproject:latest

此操作成功,我确认新镜像存在于我的gitlab镜像存储库中。

然后,我登录到生产服务器并使用以下命令下载映像:

代码语言:javascript
复制
docker login registry.gitlab.com
docker pull registry.gitlab.com/myuser/myproject:latest

同样,这在docker报告中也是成功的:

代码语言:javascript
复制
Status: Downloaded newer image for registry.gitlab.com/myuser/myproject:latest

运行docker imagesdocker ps -a不会显示任何现有的图像或容器。

然而,这就是它变得奇怪的地方。如果我随后尝试使用以下命令运行此映像:

代码语言:javascript
复制
docker run registry.gitlab.com/myuser/myproject:latest

似乎什么都没发生。运行docker ps -a会显示一个容器,其中包含命令"python2“和创建的名称"gracious_snyder”,这与我的图像不匹配。它还说,集装箱在发射后立即离开。运行docker logs gracious_snyder没有显示任何内容。

这里发生了什么事?为什么我的映像没有运行正确的命令?它几乎就像是忽略了我的docker-compose.yaml文件中的所有参数,并恢复为基本python2.7镜像中的默认值,但我不知道为什么会这样,因为我使用docker-compose构建了镜像,并且它在本地运行得很好。

我在本地和远程主机上运行Docker版本18.09.6,build 481bc77,在我的本地主机上运行docker-compose版本1.11.1,build 7c5d5e4。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-24 06:54:12

如果您的Dockerfile中没有定义命令(CMD),您将从from镜像中获取上行值。compose文件有一些用于构建映像的设置,但大多数值都定义了如何运行映像。在没有合成文件(docker vs docker- compose )的情况下直接运行图像时,不会获得合成文件中定义的运行时设置,只会获得烘焙到图像中的Dockerfile设置。

修复方法是使用您的撰写文件,或者在Dockerfile中定义CMD,如下所示:

代码语言:javascript
复制
CMD ./myscript.py --no-wait --traceback
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56283572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档