我们在ECS上部署了几个docker容器。容器内的应用程序使用远程服务,因此需要使用10.X.X.X
私有IP访问它们。
我们使用Docker 1.13和CentOS 7以及docker / alpine作为我们的基本图像。我们还使用netwokMode: host
作为容器。当我们可以从主机成功运行telnet 10.X.X.X 9999
但是如果我们从容器内部运行相同的命令时,问题就出现了,它只是挂起而且无法连接。
此外,我们在主机(容器运行的位置)中启用了net.ipv4.ip_forward
,但在远程计算机中禁用了。{/ p>
不确定可能是什么问题,也许iptables
?
答案 0 :(得分:2)
我花了一天同样的问题(尝试使用网络模式'bridge'和'host'),看起来在ECS中使用busybox的telnet是一个问题 - Alpine的telnet是busybox的符号链接。我不太了解busybox / networking来说明根本原因是什么,但我能够通过使用其他工具证明网络路径是明确的。
我的'去'用于测试网络路径正在使用netcat,如下所示。 “成功”或“失败”消息因版本而异,但拒绝或超时(-w#)非常明显。所有netcat都在这里请求一个套接字 - 它实际上并不与监听应用程序通信,所以你需要其他东西来测试它。
class FetchUserProfileController: UIViewController {
@IBOutlet weak var userFullName: UILabel!
@IBOutlet weak var userProfileImage: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
userFullName.text = ""
if let _ = FBSDKAccessToken.current()
{
fetchUserProfile()
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func fetchUserProfile()
{
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"id, email, name, picture.width(200).height(200)"])
graphRequest.start(completionHandler: { (connection, result, error) -> Void in
if ((error) != nil)
{
print("Error took place: \(error)")
}
else
{
print("Print entire fetched result: \(result)")
let fbData:[String:AnyObject] = result as! [String : AnyObject]
let userName : NSString? = fbData["name"]! as? NSString
let facebookID : NSString? = fbData["id"]! as? NSString
if let imageURL = ((fbData["picture"] as? [String: Any])?["data"] as? [String: Any])?["url"] as? String {
//Download image from imageURL
}
}
})
}
我今天的问题是对应用的mongo连接进行故障排除。 nc显示路径清晰,但telnet与你报告的问题相同。我最终安装了mongo客户端并检查了它,我可以正常连接。
如果您需要从ECS容器内部通过telnet实际运行命令,可能尝试安装不同的telnet工具并避免使用内置的busybox。