【发布时间】:2017-05-05 23:33:16
【问题描述】:
首先,我们有一个像这样的 Docker 网络:
docker network create cdt-net
然后我有这个 bash 脚本,它将启动一个 selenium 服务器:
cd $(dirname "$0")
./node_modules/.bin/webdriver-manager update
./node_modules/.bin/webdriver-manager start
这个 Dockerfile 调用了上面的 bash 脚本:
FROM openjdk:latest
RUN apt-get update && \
apt-get -y install sudo
RUN mkdir -p /root/cdt-webdriver
WORKDIR /root/cdt-webdriver
COPY start-selenium-server.sh .
ENTRYPOINT ["/bin/bash", "/root/cdt-webdriver/start-selenium-server.sh"]
我会这样构建它:
docker build -t cdt-selenium .
然后像这样运行它:
docker run --network=cdt-net --name cdt-selenium -d cdt-selenium
我遇到的问题是,即使一切都很干净,没有错误,同一 Docker 网络中的其他进程也无法与 selenium 服务器通信。
另一方面,如果我使用预先存在的图像创建 selenium 服务器,如下所示:
docker run -d --network=cdt-net --name cdt-selenium selenium/standalone-firefox:3.4.0-chromium
然后一切正常,我可以从 Docker 网络中的其他进程连接到 selenium 服务器。
有人知道我的 bash 脚本或 Dockerfile 可能有什么问题吗?也许我手动创建的 Selenium 服务器没有在正确的主机上监听?
这是完整的 Dockerfile 供参考:
FROM openjdk:latest
RUN apt-get update && \
apt-get -y install sudo
RUN sudo apt-get install -y curl
RUN sudo apt-get install -y apt-utils
RUN sudo apt-get -y update
RUN sudo apt-get -y upgrade
RUN sudo apt-get purge nodejs npm
RUN curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
RUN sudo apt-get install -y nodejs
RUN echo "before nodejs => $(which nodejs)"
RUN echo "before npm => $(which npm)"
RUN sudo ln -s `which nodejs` /usr/bin/node || echo "ignore error"
RUN mkdir -p /root/cdt-webdriver
WORKDIR /root/cdt-webdriver
COPY start-selenium-server.sh .
RUN rm -rf node_modules > /dev/null 2>&1
RUN npm init -f || echo "ignore non-zero exit code" > /dev/null 2>&1
RUN npm install webdriver-manager > /dev/null 2>&1
ENTRYPOINT ["/bin/bash", "/root/cdt-webdriver/start-selenium-server.sh"]
【问题讨论】:
-
我得到了这个没有选项
-d:docker run --network=cdt-net --name cdt-selenium cdt-selenium输出:/root/cdt-webdriver/start-selenium-server.sh: line 2: ./node_modules/.bin/webdriver-manager: No such file or directory和/root/cdt-webdriver/start-selenium-server.sh: line 3: ./node_modules/.bin/webdriver-manager: No such file or directory -
是的,抱歉,为了简单起见,我从 Dockerfile 中删除了一些行,以便人们了解要点,我将在原始问题中粘贴完整的 Dockerfile。
-
docker logs cdt-selenium和docker ps -f name=cdt-selenium启动后报告什么?或者当你在前台运行容器时会发生什么,没有-d? -
您是否已经尝试将
EXPOSE 4444添加到您的Dockerfile 并将选项-p 4444添加到docker run? -
是的,也许这就是问题所在,但我认为使用 --network 可以避免这样做
标签: bash selenium docker dockerfile