Python 3.x 命令在Entrypoint之后到达容器提示符

Python 3.x 命令在Entrypoint之后到达容器提示符,python-3.x,docker,docker-entrypoint,Python 3.x,Docker,Docker Entrypoint,可以在Dockerfile的底部添加什么命令,以在ENNTRYPOINT之后到达容器提示符?Dockerfile运行正常。只是它返回到执行它的提示符 # Pull base image From ubuntu:18.04 LABEL maintainer="tester@gmail.com" # Install dependencies RUN apt-get update -y RUN apt-get install -y build-essential python3.6 python3

可以在Dockerfile的底部添加什么命令,以在ENNTRYPOINT之后到达容器提示符?Dockerfile运行正常。只是它返回到执行它的提示符

 # Pull base image
From ubuntu:18.04
LABEL maintainer="tester@gmail.com"

# Install dependencies
RUN apt-get update -y
RUN apt-get install -y build-essential python3.6 python3.6-dev python3-pip python3.6-venv
RUN apt-get install -y vim
RUN python3.6 -m pip install pip --upgrade
RUN pip3 install pytest pytest-cache
RUN pip3 install pylint
RUN pip3 install requests

# Create working directory
RUN mkdir /testsuite

# Copy project
COPY comments_categories_api  /testsuite/comments_categories_api
COPY comments_posts_api  /testsuite/comments_posts_api/
RUN chmod -R a+rwX testsuite/
# Set working directory

WORKDIR /testsuite
# Set Python version
RUN echo alias python='/usr/bin/python3' >> ~/.bashrc
# RUN echo cd testsuite/ >> ~/.bashrc

# Define ENTRYPOINT
COPY ./docker-entrypoint.sh /testsuite/docker-entrypoint.sh
RUN ["chmod", "+x", "/testsuite/docker-entrypoint.sh"]
ENTRYPOINT ["sh", "/testsuite/docker-entrypoint.sh"] 


以“$@”结束docker-entrypoint.sh。这是一个例子:

#!/bin/bash

echo Hello

$@
==更新

根据您的评论,该文件应为:

#!/bin/bash

pytest -v

$@

进入点之后,容器从定义上退出

听起来你想说的是,你想要一个容器,它首先运行一些测试,然后启动一个交互式shell。您需要制作一个shell脚本来实现这一点

#!/bin/sh
pytest -v
sh
然后让脚本成为图像的主要处理过程


我这里有两种风格的评论,阅读其他评论可能对你也很重要。您提到尝试使用

docker run -it vip_app:v0.1 /bin/bash
如果您使用CMD声明process命令,那么您的
/bin/bash
命令将替换CMD,您将得到一个交互式shell。如果使用ENTRYPOINT声明它,
/bin/bash
将作为参数传递给ENTRYPOINT(可能会被完全忽略)。我倾向于选择CMD而不是ENTRYPOINT,如果我不清楚两者都需要的话

您还可以尝试使用
.bashrc
文件更改默认的
python
命令
.bashrc
在许多常见情况下无法读取。例如,如果你

docker run --rm vip_app:v0.1 python myapp.py

.bashrc
不会被读取,您将运行
/usr/bin/python
(可能是python2.7)。我根本不会在映像中安装这样的“便利”东西。

您可以发布用于运行容器的docker run命令吗?docker run-it vip_app:v0.1/bin/bashI在.sh文件中有pytest-v。你是说在第二行添加$@吗?你在windows上…:((您的文件有Windows结尾行字符。您应该将其保存为Linux格式,然后它就会工作。或者在容器中安装“dos2unix”,并在您的构建中运行“dos2unix/testsuite/docker entrypoint.sh”,就在您忘记安装实用程序的入口点之前(我提到了安装和运行)。添加“run apt get install-y dos2unix”使用安装其余软件包的其他命令。工作正常。我理解错误。这样做了。复制。/docker-entrypoint.sh/testsuite/docker-entrypoint.sh运行dos2unix/testsuite/docker-entrypoint.sh&&apt get--purge remove-ydos2unix@RSSregex你能把这个标记为被接受的答案吗?否则它看起来像是一个公开的讨论是我的python文件。#!/usr/bin/python3。我可以从Dockerfile中删除此文件吗?运行echo alias python='/usr/bin/python3'>>~/.bashrc。?既然您提到了CMD,我如何替换Dockerfile中的ENTRYPOINT?在Dockerfile的末尾,我希望pytest在指定的文件夹中运行,并在容器提示下运行。确切地说,就是替换ENTRYPOINT和CMD。它们的语法相同。