Pycharm添加命令

问题描述 投票:0回答:1

Pycharm专业版2019.3

Ubuntu 18.04

我想调试容器中的python脚本。我知道下面的例子过于矫kill过正,但是我想使它尽可能简单。如何将入口点添加到Dockerfile?

docker-compose.yml:

version: '3'
services:
    python:
        build: .
        container_name: ppd

Dockerfile:

RUN apt-get update
RUN apt-get install -y --no-install-recommends \
    python3-pip
ENTRYPOINT ["sleep", "5"]

app.py:

from time import sleep
for i in [1, 2, 3, 4, 5]:
    sleep(2)
    print(i)

我基于pycharm configure

enter image description hereenter image description here

如果我运行的项目没有ENTRYPOINT,一切正常:

enter image description here

docker ps -a --no-trunc --format {{.Names}}{{.Command}} | grep ppdppd "python3 -u /opt/project/build/app.py"

似乎pycharm提供了CMD命令,因为当我将CMD添加到app.py时,它将被docker忽略。

[当我在app.py中添加ENTRYPOINT并启动容器时,我看到:enter image description here

docker ps -a --no-trunc --format {{.Names}}{{.Command}} | grep ppdppd "sleep 5 python3 -u /opt/project/build/app.py"

如何结合pycharm CMD和Dockerfile中的ENTRYPOINT?

python docker docker-compose pycharm
1个回答
0
投票

如果您在Dockerfile中将ENTRYPOINT更改为CMD,一切都会正常。

ENTRYPOINT在Dockerfile中不是必需的命令。通常,您至少需要ENTRYPOINTCMD中的一个,但没有具体要求使用其中一个。如果同时指定,则the CMD gets passed as additional arguments to the ENTRYPOINT

例如,在CMD中,创建容器时覆盖ENTRYPOINT非常简单:

docker run

这似乎也是PyCharm所做的;它也与Docker Compose中的CMD选项匹配。

由于命令部分刚刚被附加到入口点部分,因此如所示显示docker run --rm myimage \ python app.py docker run --rm myimage \ ls -lrt /app 可能会导致某些奇怪的行为,并且需要一些笨拙的解决方法。

command:

此模式表示几件事:

  • ENTRYPOINT通常应该是完整的命令行;您应该期望在容器启动时将其替换。
  • 如果提供 # ENTRYPOINT ["sleep", "5"] # sleep 5 python myapp.py docker run --rm myimage \ python myapp.py # actually runs "python myapp.py" without the "sleep" wrapper docker run --rm \ --entrypoint python \ myimage \ myapp.py \ ,则应确保运行作为参数传递的CMD。如果它是Shell脚本,则以ENTRYPOINT结尾将完成此操作。
  • 如果不确定使用哪个(并且不同时使用两者),请首选CMD而不是exec "$@"
  • 如果您的程序具有复杂的调用,请考虑将其包装在shell脚本中,以便可以使用其标准参数集轻松启动它。
CMD
ENTRYPOINT
FROM python:3.8
WORKDIR /app
COPY requirements.txt .
RUN pip3 install -r requirements.txt
COPY . .
RUN chmod +x app.py

# No entrypoint; easy to specify an alternate command
CMD ["./app.py"]

((还有一个替代的“容器作为命令”模式,其中# Entrypoint is a wrapper tool that takes a command as options ENTRYPOINT ["wait-for-it.sh", "db:5432", "--"] CMD ["./app.py"] 是完整命令,而# Entrypoint is a shell script ending in `exec "$@"` ENTRYPOINT ["./entrypoint.sh"] CMD ["./app.py"] 应该是调用者提供的选项; Docker文档具有ENTRYPOINT。这不适用于PyCharm您正在描述的设置。)

© www.soinside.com 2019 - 2024. All rights reserved.