在 OpenShift Online 上执行 DNS 查找时权限被拒绝
Permission denied when performing a DNS lookup on OpenShift Online
我正在尝试在 OpenShift Online 上的 Rails 应用程序中查找 DNS 记录。不幸的是,这失败并出现权限被拒绝错误。来自日志:
[App 13739 stdout] I, [2015-01-24T13:37:47.698714 #13739] INFO -- : Completed 500 Internal Server Error in 25ms
[App 13739 stdout] F, [2015-01-24T13:37:47.811394 #13739] FATAL -- :
[App 13739 stdout] Errno::EACCES (Permission denied - bind(2)):
[App 13739 stdout] app/models/user.rb:706:in `block in validate_mail_domain'
[App 13739 stdout] app/models/user.rb:705:in `validate_mail_domain'
失败的代码是:
def validate_mail_domain
begin
Resolv::DNS.open do |dns|
dns.getresource(mail.split("@").last, Resolv::DNS::Resource::IN::SOA)
end
rescue ArgumentError
errors.add(:mail, "must be provided")
rescue Resolv::ResolvError
errors.add(:mail, "must be valid")
end
end
其中第 706 行是以 dns.getresource
开头的行。
(逻辑很简单:存在的域就会有SOA记录,如果存在none,则该域无效。)
这是非常标准的东西,这里的失败是非常出乎意料的。有没有其他方法可以让我在 OpenShift 中执行 DNS 查找?
由于 SELinux 限制,您似乎无法在 OpenShift 上进行 DNS 查找。当您通过 SSH 连接到您的设备时,您可以使用 dig
确认这一点:
$ dig google.com
dig: isc_socket_bind: permission denied
此限制记录在此 bug report, and the linked OpenShift forums thread 建议您同时使用基于 Web 的外部 DNS 查找服务作为解决方法。
我正在尝试在 OpenShift Online 上的 Rails 应用程序中查找 DNS 记录。不幸的是,这失败并出现权限被拒绝错误。来自日志:
[App 13739 stdout] I, [2015-01-24T13:37:47.698714 #13739] INFO -- : Completed 500 Internal Server Error in 25ms
[App 13739 stdout] F, [2015-01-24T13:37:47.811394 #13739] FATAL -- :
[App 13739 stdout] Errno::EACCES (Permission denied - bind(2)):
[App 13739 stdout] app/models/user.rb:706:in `block in validate_mail_domain'
[App 13739 stdout] app/models/user.rb:705:in `validate_mail_domain'
失败的代码是:
def validate_mail_domain
begin
Resolv::DNS.open do |dns|
dns.getresource(mail.split("@").last, Resolv::DNS::Resource::IN::SOA)
end
rescue ArgumentError
errors.add(:mail, "must be provided")
rescue Resolv::ResolvError
errors.add(:mail, "must be valid")
end
end
其中第 706 行是以 dns.getresource
开头的行。
(逻辑很简单:存在的域就会有SOA记录,如果存在none,则该域无效。)
这是非常标准的东西,这里的失败是非常出乎意料的。有没有其他方法可以让我在 OpenShift 中执行 DNS 查找?
由于 SELinux 限制,您似乎无法在 OpenShift 上进行 DNS 查找。当您通过 SSH 连接到您的设备时,您可以使用 dig
确认这一点:
$ dig google.com
dig: isc_socket_bind: permission denied
此限制记录在此 bug report, and the linked OpenShift forums thread 建议您同时使用基于 Web 的外部 DNS 查找服务作为解决方法。