Faits: Faits: A. C._, née en 1952, a travaillé en dernier lieu en qualité de nettoyeuse dans un hôpital. Ayant cessé toute activité depuis le 12 décembre 1996, elle a présenté, le 24 janvier 1997, une demande tendant à l'octroi d'une rente de l'assurance-invalidité. L'Office cantonal de l'assurance-invalidité du canton de Genève a requis l'avis du docteur R._, spécialiste en chirurgie orthopédique et médecin traitant de l'assurée. Dans un rapport du 14 mars 1997, ce médecin a posé le diagnostic de syndrome vertébral lombaire sur troubles statiques et dégénératifs lombaires et lombo-sacrés en présence d'une hernie discale L5-S1 médiane et para-médiane gauche, de syndrome cervical secondaire réactionnel, de genua valga avec chondropathie rotulienne en poussée douloureuse subaiguë, de pieds transverses affaissés avec hallux valgus bilatéral au début, de fibromyalgie et d'inégalité des membres inférieurs. Selon ce praticien, cependant, le problème était plutôt dû au fait que la dernière activité exercée par l'assurée ne lui convenait pas, de sorte qu'il s'agissait d'un « cas limite pour l'assurance-invalidité ». L'assurée a suivi un stage d'observation professionnelle au Centre d'intégration professionnelle (ci-après : le COPAI) du 21 juin au 16 juillet 1999. Dans un rapport du 4 août suivant, les maîtres professionnels ont fait état d'une capacité de travail (rendement) de 80 % après une période de réentraînement à l'effort de quatre mois, sans port de lourdes charges et compte tenu d'une mobilité partielle et d'activités simples, comme celles d'opératrice sur presse ou sur machine, d'ouvrière à l'établi ou en gainerie. L'intéressée a suivi un deuxième stage d'observation professionnelle à partir du 30 août 1999. Ce stage, qui devait se dérouler jusqu'au 29 novembre 1999, a été interrompu le 18 octobre précédent en raison d'une incapacité de travail attestée par le médecin traitant. Les maîtres professionnels ont indiqué que l'assurée n'avait jamais envisagé la reprise du travail, bien que les activités proposées aient été tout à fait adaptées (rapport du 8 novembre 1999). L'office AI a alors confié une expertise pluridisciplinaire aux médecins du Centre d'observation médical de l'assurance-invalidité (ci-après : le COMAI). Les experts ont fait état d'un syndrome douloureux somatoforme persistant sous forme de fibromyalgie (F45.4) et indiqué une capacité de travail de 80 % dans l'ancienne activité de nettoyeuse, pour autant que les travaux lourds soient évités (rapport du 27 septembre 2001). En outre, l'office AI a requis les avis du SMR Léman (Service médical régional de l'assurance-invalidité; rapport du 28 novembre 2001) et du docteur V._, nouveau médecin traitant de l'assurée (rapport du 27 mai 2002). Par décision du 21 juin 2002, l'office AI a rejeté la demande, motif pris que l'assurée ne souffrait pas d'une atteinte invalidante. Par décision du 21 juin 2002, l'office AI a rejeté la demande, motif pris que l'assurée ne souffrait pas d'une atteinte invalidante. B. C._ a recouru devant la Commission cantonale de recours en matière d'AVS/AI du canton de Genève (aujourd'hui : Tribunal cantonal des assurances sociales du canton de Genève), en concluant à l'octroi d'une rente entière d'invalidité. Après avoir ordonné la comparution personnelle des parties et demandé aux médecins du SMR et au docteur V._ de répondre par écrit à un certain nombre de questions, la juridiction cantonale a rejeté le recours par jugement du 17 août 2004. Après avoir ordonné la comparution personnelle des parties et demandé aux médecins du SMR et au docteur V._ de répondre par écrit à un certain nombre de questions, la juridiction cantonale a rejeté le recours par jugement du 17 août 2004. C. C._ interjette recours de droit administratif contre ce jugement dont elle demande l'annulation, en concluant, sous suite de dépens, à l'octroi d'une rente entière d'invalidité. Subsidiairement, elle demande au Tribunal fédéral des assurances d'ordonner une expertise médicale sur les plans rhumatologique et psychiatrique. L'office intimé conclut au rejet du recours, tandis que l'Office fédéral des assurances sociales a renoncé à présenter des déterminations.