我正在尝试使用Docker和Selenium Grid设置自动化测试平台.在下图中,您可以看到我正在使用的结构.最重要的是在Compute Engine上运行的ubuntu服务器.左边是一个运行ubuntu 14.04的docker容器.容器使用Google App Engine在localhost:8080上运行我们的项目.右边是Selenium Hub,在端口4444上运行两个节点.
这是运行docker ps时的输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f5ac6e3c8270 xxxxx/ubuntuport:14.04 "/bin/bash" 3 days ago Up 13 seconds 0.0.0.0:32777->8080/tcp drunk_kalam
4246ca0790db eu.gcr.io/xxxxxx/selenium-chrome "/bin/sh -c 'rm -rf /" 4 weeks ago Up 3 days evil_mahavira
8d06f90a1a84 eu.gcr.io/xxxxxx/selenium-firefox "/bin/sh -c 'rm -rf /" 4 weeks ago Up 3 days nauseous_torvalds
dc548f638778 eu.gcr.io/xxxxxx/selenium-hub "/opt/bin/entry_point" 4 weeks ago Up 3 days 0.0.0.0:32770->4444/tcp modest_khorana
Run Code Online (Sandbox Code Playgroud)
正如您所看到的那样,集线器和ubuntu容器都已激活端口,并从运行docker容器的ubuntu主机转发.我在Google Compute Engine中打开了这些端口.
在docker容器中,我正在使用Google App Engine sdk在本地运行我们的项目.使用后docker exec -it drunk_kalam bash …
我正在尝试将docker容器的IP地址作为容器中的环境变量.这是我尝试过的:
启动容器时
docker run -dPi -e ip=`hostname -i` myDockerImage
Run Code Online (Sandbox Code Playgroud)
当容器已经启动时
docker exec -it myDockerImage bash -c "export ip=`hostname -i`"
Run Code Online (Sandbox Code Playgroud)
这两种方法的问题在于它使用运行命令的主机的ip地址,而不是运行它的docker容器.
那么我在docker容器中创建了一个如下所示的脚本:
#!/bin/bash
export ip=`hostname -i`
echo $ip
Run Code Online (Sandbox Code Playgroud)
然后运行它
docker exec -it myDockerImage bash -c ". ipVariableScript.sh"
Run Code Online (Sandbox Code Playgroud)
当我添加my_cmd(在我的情况下是bash脚本的末尾)时,它可以在一个bash会话中工作.我以后不能在我需要它的文件中使用它.我需要将它设置为环境变量,而不是作为一个会话的变量.
所以我已经用'.'来源了它.但是当我在容器中时,它仍然不会回响.如果我$ip在脚本中放入一个echo ,它会给我正确的IP地址.但只能在正在设置的脚本中使用.