我有一个在其入口点使用卷的容器。例如
CMD bash /some/volume/bash_script.sh
我将其移动到 compose 但它仅在我的 compose 指向
build
中的 Dockerfile 时才有效。如果我尝试在 command
中写同一行部分没有按照我的预期运行,并抛出文件未找到错误。我也尝试使用
docker-compose run <specific service> bash /some/volume/bash_script.sh
这给了我同样的错误。问题是 - 为什么在执行 docker-compose 'command' 时我没有这个卷?有没有办法让这个工作/覆盖我的dockerfile中的CMD?
编辑:
我将在我的文件中具体展示我是如何做到这一点的:
docker 组成:
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
卷:
代码:
基础Dockerfile:
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;
这有效。
但是,如果我尝试将这一行添加到 docker-compose.yml:
command: python code.py
那么这个文件在命令时不存在。我期待这与 CMD 命令的行为相同
最佳答案
嗯,好点!command: python code.py
与 CMD python code.py;
不完全相同!
由于第一个被解释为 shell 形命令,后者被解释为 执行表格 命令。
问题在于这两种类型的 CMD 之间的差异。 (即 CMD ["something"]
与 CMD "something"
)。
有关这两个的更多信息,请参阅 here .
但是,您可能仍在思考您的示例有什么问题?
在您的情况下,基于 YAML 格式的规范,python code.py
在 command: python code.py
将被解释为单个字符串值,而不是数组!
另一方面,正如您可能已经猜到的,python code.py;
在上面提到的Dockerfile中被解释为一个数组,它提供了一个执行表格 命令。
关于docker - docker-compose 中的 command/CMD 不等同于 Dockerfile 中的 CMD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53803006/