Falling through the floor

Here is my issue, my 2D knight is falling through the ground I have a collider for him to stand on. When my knights Y velocity is 0 he floats in the air, when its 1 he starts floating up and continues endlessly and when its -1 he falls through the floor even through the collider. I’m fairly new to coding so any and all advice is welcome. Here is my script.

using UnityEngine;
using System.Collections;

public class KnightController : MonoBehaviour {

    public float Speed = 100;
    public Vector2 velocity = Vector2.one;
    private Rigidbody2D body2d;
    public bool facingRight = true;
    Animator anim;

    void Start ()
    {
        anim = GetComponent<Animator>();
    }

    void Awake()
    {
        body2d = GetComponent<Rigidbody2D>();
    }

	
	void FixedUpdate()
    {
        float move = Input.GetAxis("Horizontal");
        

        anim.SetFloat("Speed", Mathf.Abs(move));
        
        body2d.velocity = velocity;
        body2d.velocity = new Vector2(move * Speed, body2d.velocity.y);

        if(move > 0 && !facingRight)
            Flip();
        else if(move < 0 && facingRight)
             Flip();
    }

    void Flip()
    {
        facingRight = !facingRight;
        Vector3 theScale = transform.localScale;
        theScale.x *= -1;
        transform.localScale = theScale;
    }

}

@ObsidianHealer

Instead of doing this:

         body2d.velocity = velocity;
         body2d.velocity = new Vector2(move * Speed, body2d.velocity.y);

What happens if you just let gravity pull it down? Disable the script, and place your knight few units high from the floor and hit play. See if it drops and stops on the ground.

Also, it is not recommended (See here) that you change the velocity to move objects. You should use ‘AddForce’ to move instead of directly changing the velocity.

Another thing to check is your animation. Does it properly work when you do not have animations enabled?