A cruise ship is on lockdown in San Francisco after an outbreak of norovirus affecting more than 100 passengers and 20 crew.