Почему не работает margin?
Потому что она не блочная и не имеет ширины.

Вот так сработает
a {
  display: block;
  width: fit-content;
  margin-left: auto;
  margin-right: auto;
}

Либо просто задайте контейнеру text-align: center

И еще пачка способов по запросу "горизонтальное выравнивание css"
Ссылка не просто block - а inline-blockinline, для таких элементов действую правила текста(inline), соответственно margin: auto равен нулю.
Если же вы поменяете display на block, то, как блочный элемент, ссылка займёт всю ширину, и опять же margin: auto равен нулю.)

Решения: 
а) text-align: center контейнеру, чтоб центрировать текст а вместе с ним и inline элементы.
б) display: block и text-align: center самой ссылке чтоб центрировать текст внутри неё.
с) перейти на flex.
...