Python Pycharm添加命令
Pycharm专业版2019.3 Ubuntu 18.04 我想调试容器中的python脚本。我知道下面的例子有些过分,但我想让它尽可能简单。如何将入口点添加到Dockerfile docker compose.yml: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
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
- 如果提供了
,则应确保运行作为参数传递的入口点
。如果它是一个shell脚本,则以CMD
结尾即可exec“$@”
- 如果您不确定要使用哪一个(并且不同时使用这两个),请选择
而不是CMD
ENTRYPOINT
<> LI>如果您的程序有复杂的调用,请考虑将其封装在shell脚本中,以便它可以以标准的参数集轻松启动。
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设置不起作用。)