Great question. The gradients along the tracks on the canvas are complex. The easiest way is to wash yourself.
Instead of thinking of your image as a gradient that follows a circular path, think of it as two linear gradients.
- One on the left side, from green to gray, from top to bottom.
- The other is on the right side, from white to gray, from top to bottom.
Imagine a square of these two gradients:

Now imagine a circle cutting through:

What you have to do.
To "cut", as it was the easiest way, use clipping areas, so I made an example of this.
Here is a live example: http://jsfiddle.net/simonsarris/Msdkv/
The code is below! Hope this helps.
var greenPart = ctx.createLinearGradient(0,0,0,100); greenPart.addColorStop(0, 'palegreen'); greenPart.addColorStop(1, 'lightgray'); var whitePart = ctx.createLinearGradient(0,0,0,100); whitePart.addColorStop(0, 'white'); whitePart.addColorStop(1, 'lightgray'); var width = 20; ctx.lineWidth = width;
source share