我正在设置一个dockerised selenium网格.我可以通过附加到pytest容器[见下面]发送我的python测试[用pytest运行].
但是我已经设置了另一个控制pytest的LAMP容器.
所以我想让pytest容器独立,运行空闲并等待来自LAMP容器的命令.
我有这个Dockerfile:
# Starting from base image
FROM ubuntu
#-----------------------------------------------------
# Set the Github personal token
ENV GH_TOKEN blablabla
# Install Python & pip
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y python python-pip python-dev && pip install --upgrade pip
# Install nano for #debugging
RUN apt-get install -y nano
# Install xvfb
RUN apt-get install -y xvfb
# Install GIT
RUN apt-get update -y && apt-get install git -y
# [in the / folder]
RUN git clone https://$GH_TOKEN:x-oauth-basic@github.com/user/project.git /project
# Install dependencies via pip
WORKDIR /project
RUN pip install -r dependencies.txt
#-----------------------------------------------------
#
CMD ["/bin/bash"]
我手动启动pytest容器[用于开发]:
docker run -dit -v /project --name pytest repo/user:py
问题是我完成了开发,我希望从docker-compose启动pytest容器并将其连接到其他容器[带链接和卷].
我无法让它熬夜.
我用过这个:
pytest:
image: repo/user:py
volumes:
- "/project"
command: "/bin/bash tail -f /dev/null"
但没有工作.
那么,在Dockerfile中,我应该使用特定的CMD还是ENTRYPOINT?
我应该使用docker-compose文件中的一些命令吗?
最佳答案
我不确定你的测试是如何执行的,但我认为我有一个类似的用例.您可以在cmd.sh和a sample test的Envoy project中看到我是如何做到这一点的.
以下是我运行测试的方法.我也在使用pytest,但这并不重要:
1.使用docker-compose调出堆栈,不进行测试
2.等待堆栈为请求做好准备.对我来说,这意味着民意调查200响应
3.单独运行测试容器,但确保它使用与compose堆栈相同的网络.
这可以通过几种方式完成.您可以将所有内容放在Bash脚本中,并从主机控制所有内容.
在我的例子中,我从Python容器中完成所有这些操作.它有点包围,但想法是有一个主机启动的Python测试容器.然后容器本身使用compose将堆栈重新调回主机(dockerception).然后在测试容器中运行pytest测试.完成后,它会组合堆栈并推送返回代码.