我是码头工的新手,试着把它放在上面。我正面临一个小问题,无论如何,我的帮助将不胜感激!
我有一个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/
答案 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')