Melbourne Matildas's wing back Steph Catley tested Willacy in the second minute with a shot that the Adelaide goalkeeper palmed round the post, and shortly after Alanna Kennedy threatened from a Kyah Simon corner.
City almost made the breakthrough when Simon's effort beat the goalkeeper but was headed off the line by Adelaide's Emma Checker.
But the inevitable occurred two minutes later when City's Ashley Hatch headed home from a Catley cross.
Adelaide threatened sporadically and City goalkeeper Lydia Williams had another injury scare when she came to punch clear an Adelaide attack but landed awkwardly. Williams lay on the ground for some time but eventually got up to carry on.
Hatch then shot wide and Simon was once again denied by the Adelaide keeper Willacy as the Reds managed to keep the deficit to one as they went to the interval.
Hatch went close eight minutes after the restart when she made space well for herself with a couple of stepovers before firing a looping shot just over the bar.
The American then spurned a great chance when played through to go one-on-one with Willacy, her heavy touch forcing her into a hurried shot just wide of the post.
City laid siege to the Adelaide goal but still could not put the game to bed. Japanese international Yukari Kingma shot into the side netting, then Simon broke clear but could not get a shot away.
City skipper Jesh Fishlock broke through with a great chance to shoot. But instead of taking the opportunity herself she slid a pass across to Larissa Crummer who failed to connect. The slightest of touches would have produced City's second goal.
Instead it was the Reds who got on the scoresheet in the 72nd minuted with a goal few would have seen coming. Jenna McCormick crossed into the Melbourne penalty area, the defence failed to deal with it, and Alyssa Mautz drove home.
City thought it could take the points when Willacy brought down Fishlock, but the vistors' goalkeeper redeemed herself by saving the penalty shot.