Not*_*bby 5 docker docker-compose
我有一个在其入口点使用卷的容器。例如
CMD bash /some/volume/bash_script.sh
Run Code Online (Sandbox Code Playgroud)
我将其移动到 compose 但它仅在我的 compose 指向该build部分中的 Dockerfile 时才有效,如果我尝试在该部分中编写相同的行command未按我的预期运行并引发文件未找到错误。
我也尝试使用docker-compose run <specific service> bash /some/volume/bash_script.shwhich 给了我同样的错误。
问题是 - 为什么在执行 docker-compose 'command' 时我没有这个卷?有没有办法让这个工作/覆盖我的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
Run Code Online (Sandbox Code Playgroud)
卷: 代码:
基础Dockerfile:
FROM python:3.6-slim
WORKDIR /volumes/code/
COPY code.py code.py
CMD tail -f /dev/null
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
这有效。
但是,如果我尝试将这一行添加到 docker-compose.yml:
command: python code.py
Run Code Online (Sandbox Code Playgroud)
那么这个文件在命令时不存在。我期待这与 CMD 命令的行为相同
Emr*_*ich 11
嗯,好点!
command: python code.py不完全一样CMD python code.py;!
由于第一个被解释为shell 形式的命令,而后者被解释为exec 形式的命令。
问题在于这两种类型的CMD的差异。(即CMD ["something"]vs CMD "something")。
有关这两者的更多信息,请参阅此处。
但是,您可能仍然在想您的示例有什么问题?
在您的情况下,根据YAML格式的规范,python code.py将command: python code.py被解释为单个字符串值,而不是数组!
另一方面,正如您可能已经猜到的那样,python code.py;在上述 Dockerfile 中被解释为一个数组,它提供了一个exec-form命令。
| 归档时间: |
|
| 查看次数: |
4034 次 |
| 最近记录: |