【发布时间】:2021-09-12 11:14:05
【问题描述】:
我一直试图在我的 docker compose 文件中理解 command: 和 command:- 之间的区别:
这是我的 dockerfile:
ENV PYTHONUNBUFFERED=1
COPY requirements.txt .
COPY dbenv .
RUN python3 -m pip install pymysql
RUN pip install mysql-connector-python
RUN pip install openpyxl
RUN pip install lxml
RUN pip install -r requirements.txt
RUN pip install pandas
RUN pip install requests
RUN pip install beautifulsoup4
COPY . .
WORKDIR /MY_DATABASE
这是我的 docker compose 文件:
version: '3.6'
services:
db:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=postgres
- MYSQL_DATABASE=webscrape
- MYSQL_USER=django
- MYSQL_PASSWORD=djangodb
ports:
- 3306:3306
restart: always
# cap_add:
# - SYS_NICE
scraper:
build:
context: .
dockerfile: dockerfile
environment:
- MYSQL_ROOT_PASSWORD=postgres
- MYSQL_DATABASE=webscrape
- MYSQL_USER=django
- MYSQL_PASSWORD=djangodb
- MYSQL_PORT=3306
- MYSQL_HOST=db
# working_dir: /MY_DATABASE
restart: always
depends_on:
- db
# command: python Security_table/initialize_securities_table.py
working_dir: /MY_DATABASE
command:
- python Security_table/initialize_securities_table.py
现在如果注释最后 2 行,我取消注释最后 3 行,如下所示
command: python Security_table/initialize_securities_table.py
一切都会按预期进行。但是如果我尝试把它放在一个列表格式中,它就行不通了。
command:
- python Security_table/initialize_securities_table.py
它会告诉“没有这样的文件或目录:未知”
我在这里缺少什么?
【问题讨论】:
-
如果你想以列表的形式提供你的命令,你的命令行的每个元素都需要在自己的项目中:
command: ['python', 'Security_table/initialize_securities_table.py']docs.docker.com/compose/compose-file/compose-file-v3/#command -
这基本上是一个关于 YAML 语法的问题。如果您的
command是一个列表,则它应该是每个项目一个token,而不是每个项目一个命令(类似于Dockerfile中CMD python file.py和CMD ["python", "file.py"]之间的区别。跨度>
标签: docker docker-compose