One possible solution is putting the dots on a path:
In the next example I'm drawing an arc. The radius of the arc in this case is 100. The d attribute for the path is:
d="M-80,0A100,100 0 0 1 80,0"
The dots on the arc are the doted stroke. In order to know the value of the stroke-dasharray used I'm using javascript: you have strokes very small (.1) followed by gaps of 1/5 of the total length of the path. 1/5 is for 5 dots. Also I'm using a stroke-dashoffset of 1/10 of the total length of the path i.e one half of the gap used for stroke-dasharray
let length = thePath.getTotalLength()
thePath.setAttribute("stroke-dasharray", `.1,${length/5}`)
thePath.setAttribute("stroke-dashoffset", length/10)
svg{border:solid; }
<svg width="200" viewBox="-100 -100 200 200">
<path id="thePath" d="M-80,0A100,100 0 0 1 80,0" fill="none" stroke="black" stroke-linecap="round" stroke-width="30"/>
</svg>
In order to put the dots on a straight line I'm changing the path to a arc with a very big radius: 1000 in this case
d="M-80,0A1000,1000 0 0 1 80,0"
let length = thePath.getTotalLength()
thePath.setAttribute("stroke-dasharray", `.1,${length/5}`)
thePath.setAttribute("stroke-dashoffset", length/10)
svg{border:solid; }
<svg width="200" viewBox="-100 -100 200 200">
<path id="thePath" d="M-80,0A1000,1000 0 0 1 80,0" fill="none" stroke="black" stroke-linecap="round" stroke-width="30"/>
</svg>