当前位置: 首页 > 知识库问答 >
问题:

docker-compose中的command/CMD不等同于Dockerfile中的CMD

华项明
2023-03-14

我有一个容器在其入口点中使用卷。例如:

CMD bash /some/volume/bash_script.sh

我将它移到了compose,但只有当我的compose指向build部分中的Dockerfile时,它才会起作用,如果我试图在command部分中写入相同的行,则没有按照我的预期操作,并抛出file not found错误。

我还尝试使用docker-compose run bash/some/volume/bash_script.sh ,这给了我同样的错误。

问题是--为什么在执行docker-compose“命令”时我没有这个卷?有没有办法使这个工作/重写我的dockerfile中的CMD?

编辑:我将在我的文件中具体显示如何执行此操作:

version: '3'
services:
  base:
    build: 
      context: ..
      dockerfile: BaseDockerfile
    volumes:
      code:/volumes/code/
  my_service:
    volumes:
      code:/volumes/code/
    container_name: my_service
    image: my_service_image
    ports:
      - 1337:1337
    build: 
      context: ..
      dockerfile: Dockerfile

卷:代码:

BaseDockerFile:

FROM python:3.6-slim

WORKDIR /volumes/code/

COPY code.py code.py
CMD tail -f /dev/null

DockerFile:

FROM python:3.6-slim

RUN apt-get update && apt-get install -y redis-server \
alien \
unixodbc 

WORKDIR /volumes/code/


CMD python code.py;
command: python code.py

共有1个答案

沙海
2023-03-14

(部分)答案是抛出的错误与问题所在完全不同。运行以下命令:bash-c'python code.py'工作良好。我仍然无法解释为什么Dockerfile中CMD和docker-compose“command”操作之间存在差异。但这为我解决了问题

 类似资料:
  • 问题内容: 这里似乎有类似的问题(docker-composevolume_from与版本3等效,如何替换docker-composer v3中的volume_from),但我不认为它们会回答问题(或者至少我不理解答案如何解决问题)。因此,让我尝试再次询问,非常明确。 我有这个v2 docker-compose.yml: 关键是该卷集只定义了一次,我可以使用轻松地重用它们。 您将如何在v3中重写它

  • 问题内容: 我对docker很陌生,并且正在遵循此处找到的文档,尝试使用docker- compose 1.14.0在dind内部署几个容器,我得到了以下内容 我错过了什么? 问题答案: 在执行docker run之前,将docker-compose安装添加到您的Dockerfile中。 例如,如果您有一个Ubuntu码头工人,则将其添加到您的 Dockerfile中 : 因为看起来好像您的入口点

  • 我现在的码头工人。yml- 我的码头工人。yml文件包含2个服务。我已经指定postgrasdb服务在python应用程序服务使用之前启动,但是docker没有按照指定的顺序运行服务。如何让postgrasdb服务在python应用程序服务之前运行?我正在运行命令。

  • 然而,这将失败。和参数从不传递给给定的DockerFile。 示例: 正如在构建阶段中显而易见的那样,它们从未被解析过: 产出: 如何不将其解析到cmd上?

  • 问题内容: 我对何时应该使用vs 感到困惑。例如,要执行bash / shell命令(即),我将始终使用它,或者是否存在我会使用的情况?试图了解有关这两个类似指令的最佳实践。 问题答案: RUN是映像构建步骤,命令后将容器的状态提交到容器映像。一个Dockerfile可以有很多步骤相互叠加以构建映像。 CMD是启动构建映像时容器默认执行的命令。Dockerfile将仅使用最终定义的。使用启动容器时

  • 我很困惑什么时候应该使用和。例如,要执行bash/shell命令(即),我将始终使用,或者是否存在使用的情况?试图理解关于这两个类似的指令的最佳实践。