Dockernetworking不适用于bash入口点

首先,我们有一个像这样的Dockernetworking:

docker network create cdt-net 

然后我有这个bash脚本将启动一个selenium服务器:

 cd $(dirname "$0") ./node_modules/.bin/webdriver-manager update ./node_modules/.bin/webdriver-manager start 

上面的bash脚本被这个Dockerfile调用:

 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"] 

我会这样构build它:

 docker build -t cdt-selenium . 

然后像这样运行它:

 docker run --network=cdt-net --name cdt-selenium -d cdt-selenium 

我遇到的问题是,即使一切都干净而没有错误,同一个Dockernetworking中的其他进程也无法与Selenium服务器通信。

另一方面,如果我使用预先存在的映像创build一个selenium服务器,如下所示:

 docker run -d --network=cdt-net --name cdt-selenium selenium/standalone-firefox:3.4.0-chromium 

那么事情就像预期的那样工作,我可以从Dockernetworking中的其他进程连接到selenium服务器。

任何人都知道什么可能是我的bash脚本或Dockerfile错误? 也许我手动创build的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"] 

只有当docker镜像运行良好时,才应该使用-d 。 在使用之前,

将您的webdriver-manager更改为全局安装

 RUN npm install -g webdriver-manager > /dev/null 2>&1 ENTRYPOINT ["/bin/bash", "/root/cdt-webdriver/start-selenium-server.sh"] 

还要把你的start-selenium-server.sh

 webdriver-manager update webdriver-manager start 

并使用下面的运行,并检查是否有任何问题

 docker run --network=cdt-net --name cdt-selenium -it cdt-selenium