【发布时间】:2016-02-18 14:44:27
【问题描述】:
我正在建立一个 dockerised selenium 网格。我可以通过附加到 pytest 容器 [见下文] 发送我的 python 测试 [使用 pytest 运行]。 但是我已经设置了另一个 LAMP 容器来控制 pytest。 所以我想让 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 文件中的一些command 吗?
【问题讨论】:
-
你的 docker run 有
-dit这很奇怪,它要么是 d 要么是它,而不是两者,是的,你的 Dockerfile 应该有一个 CMD 或 ENTRYPOINT -
我首先使用 -dit 启动它,这样我就拥有了免费的控制台,然后我使用 compose 启动了另一个容器,该容器取决于第一个启动的容器。我知道它应该有,但是包含的命令是什么来保持它??
-
我猜@user2915097 的意思是您不需要
it,只需-d即可将容器作为守护进程(后台)运行。-it可用于交互式运行容器并分配tty。 -
我明白了。我可以使用 -d 让它在后台运行,并让主机控制台可用,并且以后仍然可以附加到容器。
标签: python docker pytest docker-compose dockerfile