我有一个容器在其入口点中使用卷。例如:
CMD bash /some/volume/bash_script.sh
我将它移到了compose,但只有当我的compose指向build
部分中的Dockerfile时,它才会起作用,如果我试图在command
部分中写入相同的行,则没有按照我的预期操作,并抛出file not found错误。
我还尝试使用docker-compose run
,这给了我同样的错误。
问题是--为什么在执行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
(部分)答案是抛出的错误与问题所在完全不同。运行以下命令: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命令(即),我将始终使用,或者是否存在使用的情况?试图理解关于这两个类似的指令的最佳实践。