Docker,拒绝所有其他正在运行的服务的连接

Posted

技术标签:

【中文标题】Docker,拒绝所有其他正在运行的服务的连接【英文标题】:Docker, connection refused for every other running services 【发布时间】:2016-10-07 15:11:18 【问题描述】:

我本地安装的docker无法访问其他端口。

这是我的docker-compose.yml 文件:

db:
  image: library/mysql:5.6
  environment:
    MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
  expose:
    - "3306"
  ports:
    - "3306:3306"

mailcatcher:
  image: yappabe/mailcatcher
  ports:
    - "1025:1025"
    - "1080:1080"

rails-app:
  build: .
  dockerfile: "Dockerfile"
  environment:
    RAILS_ENV: development
  links:
    - mailcatcher
    - db
  command: bundle exec rails server -p 3005 -b '0.0.0.0'
  volumes:
    - ".:/home/app"
  volumes_from:
    - bundle
  expose:
    - "3005"
  ports:
    - "3005:3005"

这是mailcatcher config/environments/development.rb的配置:

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings =  address: "localhost", port: 1025 

这就是我运行 rails 应用程序的方式:

docker-compose run --service-ports rails-app

这是我在运行docker ps时看到的:

> docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                                            NAMES
1fa8ac2ad8fd        pmt_rails-app          "bundle exec rails se"   5 seconds ago       Up 3 seconds        0.0.0.0:3005->3005/tcp                           pmt_rails-app_run_1
4f65bb2fc9ac        yappabe/mailcatcher    "/run.sh"                About an hour ago   Up About an hour    0.0.0.0:1025->1025/tcp, 0.0.0.0:1080->1080/tcp   pmt_mailcatcher_1
cfb364ee569f        library/mysql:5.6      "docker-entrypoint.sh"   About an hour ago   Up About an hour    0.0.0.0:3306->3306/tcp                           pmt_db_1

这是我在 rails 应用程序尝试发送电子邮件时得到的结果:

Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 1025
from /usr/local/lib/ruby/2.3.0/net/smtp.rb:542:in `initialize'

当我尝试连接在另一个端口上运行的另一个 rails server 时,我遇到了同样的错误。

我正在 Mac OSX 中使用 Docker-beta。

【问题讨论】:

【参考方案1】:

localhost 在 docker 实例上将引用该实例公开的端口。如果您想从同一docker-compose.yml 文件中的另一个实例访问端口,请使用links,其形式为service-name:alias。 (如果排除alias,则与source-name相同。)

所以在上面的示例中,mailcatcher config/environments/development.rb 的配置应该是:

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings =  address: "mailcatcher", port: 1025 

【讨论】:

你救了我的命! 很高兴我能帮上忙 :) 2 条生命,而且还在计数!

以上是关于Docker,拒绝所有其他正在运行的服务的连接的主要内容,如果未能解决你的问题,请参考以下文章

来自其他容器的 Docker mongo 图像“连接被拒绝”

如何处理柯南服务器连接被拒绝?

Docker通过网关访问服务时拒绝连接

Bamboo - Docker 映像运行错误 - 连接被拒绝

在docker中运行flyway时连接被拒绝

连接拒绝 docker、laravel 和 mysql 服务器