【问题标题】:Docker network does not work with bash entrypointDocker 网络不适用于 bash 入口点
【发布时间】: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"]

【问题讨论】:

  • 我得到了这个没有选项-ddocker 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-seleniumdocker ps -f name=cdt-selenium 启动后报告什么?或者当你在前台运行容器时会发生什么,没有-d
  • 您是否已经尝试将EXPOSE 4444 添加到您的Dockerfile 并将选项-p 4444 添加到docker run
  • 是的,也许这就是问题所在,但我认为使用 --network 可以避免这样做

标签: bash selenium docker dockerfile


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-05-14
    • 2020-07-16
    • 2020-05-30
    • 2018-09-03
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多