仮想マシンでは解決しないのは、
例えば仮想マシンで同じコンテナを2つを同じホスト名動かそうとしたら
ポートがかぶってしまって動かないってこと。
開発環境であればポート80で動くものを複数動かしたくなる。

仮想マシンはマシンであるがゆえに、
マシンの制約から逃れることはできない。
マシンにはホスト名が存在するから、そのホスト名に紐付いてしまう。

だから仮想マシン上で動かすアプリのために、仮想マシンそのものの設定変更が必要になる。

Dockerの場合はそれがいらないからこそ、いろんな場所に移動可能になる。