在docker容器中运行ruby脚本,该容器连接到mongodb localhost端口

时间:2018-06-04 14:58:50

标签: ruby mongodb docker

我是码头工的新手,试着把它放在上面。我正面临一个小问题,无论如何,我的帮助将不胜感激!

我有一个ruby脚本,我在其中连接到我的localhost端口,该端口被分配给我的mongodb数据库。我使用MongoClient从脚本连接到数据库:

clientDB = Mongo::Client.new(["localhost:37017"], :database => 'Database', :user => 'user', :password => 'password')

clientDB = Mongo::Client.new(["127.0.0.1:37017"], :database => 'Database', :user => 'user', :password => 'password')

如果我使用 ruby​​ monthly_count_script.rb 命令运行脚本,它可以正常工作,但在我探索Docker时,我想将该脚本运行到容器中。所以要运行一个容器我正在使用以下命令

docker run -it --rm --name my-running-script -v "$PWD":/usr/src/app -v "$PWD"/../gems:/usr/local/bundle -w /usr/src/app --net=host ruby ruby monthly_count_script.rb

不幸的是我一直收到以下错误,我不知道为什么它无法连接到localhost 37017端口,即使我的数据库工作正常并且我能够使用Robomongo或mongodb连接到数据库控制台。

这是错误日志:

D, [2018-06-04T14:15:11.527381 #1] DEBUG -- : MONGODB | Topology type 'single' initializing.
D, [2018-06-04T14:15:11.527639 #1] DEBUG -- : MONGODB | Server 127.0.0.1:37017 initializing.
D, [2018-06-04T14:15:11.529252 #1] DEBUG -- : MONGODB | Connection refused - connect(2) for 127.0.0.1:37017
D, [2018-06-04T14:15:11.530774 #1] DEBUG -- : MONGODB | Topology type 'single' initializing.
D, [2018-06-04T14:15:11.531058 #1] DEBUG -- : MONGODB | Server 127.0.0.1:37017 initializing.
D, [2018-06-04T14:15:11.532518 #1] DEBUG -- : MONGODB | Connection refused - connect(2) for 127.0.0.1:37017
D, [2018-06-04T14:15:12.032037 #1] DEBUG -- : MONGODB | Connection refused - connect(2) for 127.0.0.1:37017
D, [2018-06-04T14:15:12.533348 #1] DEBUG -- : MONGODB | Connection refused - connect(2) for 127.0.0.1:37017
D, [2018-06-04T14:15:13.036087 #1] DEBUG -- : MONGODB | Connection refused - connect(2) for 127.0.0.1:37017

期待您的帮助/指导。

仅供参考我在以下文档中关于在docker中运行ruby脚本: https://docs.docker.com/samples/library/ruby/

1 个答案:

答案 0 :(得分:1)

Docker容器内部无法使用本地端口,您只能连接到容器中打开的端口或使用--link连接到其他容器。

要连接到主机端口,您应该使用Docker网络网关的IP。

要运行容器的网关IP:

docker inspect --format='{{range .NetworkSettings.Networks}}{{.Gateway}}{{end}}'

通常会返回172.17.0.1(我再说一遍,这个答案仅对默认网络配置有效,假设容器连接到网桥网络)

然后你可以更新mongo客户端配置:

clientDB = Mongo::Client.new(["172.17.0.1:37017"], :database => 'Database', :user => 'user', :password => 'password')