How about check with cruise-line agent?
Last month, my officemate, an Indian guy went cruise from Seatle to Alaska. He is on H-1B with multiple entry. The agent told him that he needed to get Canadian visa, because the cruise-ship will stop over Vancouvur. Otherwise they won't be allowed to get on-board at Seatle port.