I agree. When he runs off and you have no power to stop him, he's self-rewarding for ignoring your call. He gets the #1 best reward, and he didn't have to obey you for it. So keep him on a long lead and practice calling him. If he doesn't respond, guide him towards you and run/walk backwards. When he comes, (or you pull him to you, gently) reward by releasing him to the dog if you know the dog or are confident it's not aggressive. This will show him that recall doesn't mean he misses out, it means he can go play, while failing to recall means he gets nothing. (start this out when he's already at the end or almost at the end of the lead, this way he'll already know he can't self-reward. You can phase out the lead when he's more reliable, but you don't want your dog, say, running across the road to greet another dog, or greeting an aggressive dog, and getting hurt, so until he's reliable, keep a lead on him, even if it's just dragging so you can pick it up when necessary.
Every time you call him and he disobeys, but self-rewards by greeting a dog, his recall in that situation is weakening, and that may even weaken his recall in other situations as well. So if you're ever in a situation where he's not on the lead, don't give the command unless you're sure he'll obey. (You can try running away from him or even hiding behind a tree or other object to make recalls more fun, and therefore more rewarding)
One other thing I do with my dogs to teach them to recall off of something interesting is I start on a 20ft (any length, this is just an example of what I started with for my current dog) lead in a calm environment such as a hallway. I place a medium-value (such as a training treat) treat 21 feet away, and allow the dog to go after it. When she's around 15-18 feet away, I call her. If she ignores me, (which, generally, they do) I allow her to get to the end, and then I say something to encourage her to return. Not the "sacred" recall word, something like "here pup-pup-pup". I will then start to walk away. The dog ends up following, and when she recalls and sits at my heel, (that's my chosen end behavior for recall), even if I had to cox or lure her, I say "Yes!", repeat my recall cue, and give a high-value reward (such as chicken) before releasing her to the original treat. You can slowly progress to having her leave a high-value treat for a low value reward, then being released to the high value.
Once she's got the hang of that, I do the same thing as the previous drill, but this time, I
throw a low to medium value treat just out of the reach of the lead. I allow her to go get it, but when she's almost there, I call her. If she turns and comes back, she gets a party and is released to the treat. If she doesn't, I guide her back to me after she reaches the end of the lead. She is then rewarded with a high value treat. Mix in some repetitions where she's allowed to just go get the treat, or she'll stop trying to go after it in the first place. As with the other drill, you slowly work up to a high-value distraction treat.
When the dog is understanding all that, you can slowly phase out the lead, starting with the original easy drill and working back up to the hard one. After that, you can add the lead back in, and try the same drills with a friend's dog just out of reach instead of a treat. It's always important to reinforce a good recall with a release if possible.
For calling the dog off of a distraction they already have, I start with a treat in a container, and throw that as if I'm doing the previous drill. However, I allow the dog to "catch" the container. At first, I wait for her to get bored and realize she can't get it, then I call, reward, and go open the container for her. I gradually work up to calling her before she gets bored, even to when she first catches it.
Sorry this is so long. I have a minor obsession with recall and off-leash distraction obedience.