Python Pycharm添加命令

Python Pycharm添加命令,python,docker,docker-compose,pycharm,Python,Docker,Docker Compose,Pycharm,Pycharm专业版2019.3 Ubuntu 18.04 我想调试容器中的python脚本。我知道下面的例子有些过分,但我想让它尽可能简单。如何将入口点添加到Dockerfile docker compose.yml: version: '3' services: python: build: . container_name: ppd RUN apt-get update RUN apt-get install -y --no-install-rec

Pycharm专业版2019.3

Ubuntu 18.04

我想调试容器中的python脚本。我知道下面的例子有些过分,但我想让它尽可能简单。如何将入口点添加到Dockerfile

docker compose.yml:

version: '3'
services:
    python:
        build: .
        container_name: ppd
RUN apt-get update
RUN apt-get install -y --no-install-recommends \
    python3-pip
ENTRYPOINT ["sleep", "5"]
from time import sleep
for i in [1, 2, 3, 4, 5]:
    sleep(2)
    print(i)
Dockerfile:

version: '3'
services:
    python:
        build: .
        container_name: ppd
RUN apt-get update
RUN apt-get install -y --no-install-recommends \
    python3-pip
ENTRYPOINT ["sleep", "5"]
from time import sleep
for i in [1, 2, 3, 4, 5]:
    sleep(2)
    print(i)
app.py:

version: '3'
services:
    python:
        build: .
        container_name: ppd
RUN apt-get update
RUN apt-get install -y --no-install-recommends \
    python3-pip
ENTRYPOINT ["sleep", "5"]
from time import sleep
for i in [1, 2, 3, 4, 5]:
    sleep(2)
    print(i)
我基于

如果我在没有ENTRYPOINT的情况下运行project,则一切正常:

docker ps-a--no-trunc--format{{{.Names}{{.Command}}}grep-ppd
ppd“python3-u/opt/project/build/app.py”

看起来pycharm给出了CMD命令,因为当我将CMD添加到app.py时,docker会忽略它

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

docker ps-a--no-trunc--format{{{.Names}{{.Command}}}grep-ppd
ppd“睡眠5 python3-u/opt/project/build/app.py”


如何将Dockerfile中的ENTRYPOINT与pycharm CMD结合起来?

如果您将Dockerfile中的
ENTRYPOINT
更改为
CMD
,一切都会正常工作

ENTRYPOINT
不是Dockerfile中必需的命令。通常,您至少需要
入口点
CMD
中的一个,但没有使用其中一个的具体要求。如果同时指定这两个参数

例如,在
docker run
中,当您创建容器时,很容易覆盖
CMD

docker运行--rm myimage\
python app.py
docker run--rm myimage\
ls-轻轨/应用
这似乎也是PyCharm正在做的事情;它还匹配Docker Compose中的
命令:
选项

由于命令部分只是附加到入口点部分,如图所示指定
entrypoint
可能会导致一些奇怪的行为,并且需要一些笨拙的解决方法

#入口点[“睡眠”,“5”]
#睡眠5 python myapp.py
docker run--rm myimage\
python myapp.py
#实际上运行“pythonmyapp.py”时没有“sleep”包装
docker run--rm\
--入口点python\
我的形象\
myapp.py\
这种模式意味着两件事:

  • CMD
    通常应该是一个完整的命令行;您应该期望它可能在容器开始时被替换
  • 如果提供了
    入口点
    ,则应确保运行作为参数传递的
    CMD
    。如果它是一个shell脚本,则以
    exec“$@”
    结尾即可
  • 如果您不确定要使用哪一个(并且不同时使用这两个),请选择
    CMD
    而不是
    ENTRYPOINT
  • <> LI>如果您的程序有复杂的调用,请考虑将其封装在shell脚本中,以便它可以以标准的参数集轻松启动。
来自python:3.8的

WORKDIR/app
复制requirements.txt。
运行pip3安装-r requirements.txt
复制
运行chmod+x app.py
#没有入口点;易于指定备用命令
CMD[“/app.py”]
#Entrypoint是一种包装工具,它将命令作为选项
入口点[“wait it.sh”、“db:5432”、“--”]
CMD[“/app.py”]
#Entrypoint是一个以'exec'$@结尾的shell脚本`
入口点[“/”入口点.sh“]
CMD[“/app.py”]
(有一种替代的“容器作为命令”模式,
ENTRYPOINT
是一个完整的命令,
CMD
应该是调用方提供的选项;Docker文档有。这与您描述的PyCharm设置不起作用。)