初めてdockerを使用し、これを実装しようとしていました- https://docs.docker.com/get-started/part2/#tag-the-image
ある段階で、このコマンドでローカルホストに接続しようとしていました-
$ curl http://localhost:4000
このエラーを示した
curl: (7) Failed to connect to localhost port 4000: Connection refused
しかし、私は次のコードでこれを解決しました-
$ docker-machine ip default
$ curl http://192.168.99.100:4000
その後、すべてがうまくいきましたが、最後の部分では、チュートリアルに従って次の行を使用してアプリを実行しようとしました...
$ docker run -p 4000:80 anibar/get-started:part1
しかし、私はこのエラーを受け取りました
C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: driver failed programming external connectivity on endpoint goofy_bohr (63f5691ef18ad6d6389ef52c56198389c7a627e5fa4a79133d6bbf13953a7c98): Bind for 0.0.0.0:4000 failed: port is already allocated.
ポートは割り当てられているようですので、これを解決する方法を教えてください。
同じポートを使用する新しいコンテナを起動する前に、起動した以前のコンテナが強制終了されていることを確認する必要があります。
docker container ls
docker rm -f <container-name>
IgorBeazに敬意を表して、現在のコンテナの実行を停止する必要があります。そのために、現在のCONTAINER IDを知ることになります。
$ docker container ls
次のようになります:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
12a32e8928ef friendlyhello "python app.py" 51 seconds ago Up 50 seconds 0.0.0.0:4000->80/tcp romantic_tesla
次に、次の方法でコンテナを停止します。
$ docker stop 12a32e8928ef
最後に、あなたがやりたいことをやろうとします、例えば:
$ docker run -p 4000:80 friendlyhello
上記の2つの答えは正しいですが、私にとってはうまくいきませんでした。
私はこのように解決しました:
まず、実行中のすべてのコンテナーを停止しました。
docker-compose down
次に、lsof
コマンドを実行して、ポートを使用してプロセスを見つけました(私にとってはポート9000でした)
Sudo lsof -i -P -n | grep 9000
最後に、プロセスを「強制終了」しました(私の場合、VSCode拡張機能でした)。
kill -9 <process id>
docker-compose
でこの問題を抱えている人のために。同様のサービスを持つ複数のプロジェクト(つまり、異なるフォルダー)がある場合、他のプロジェクトのdocker-compose stop
各を実行する必要があります。
コンテナを停止してもうまくいきませんでした。 docker-compose.yml
のポートを変更しました。
Docker-composeでも同じ問題が発生しました。
docker ps
は、Dockerで実行されているコンテナのリストを表示します。
必要なポートで実行されているものを見つけ、PIDを書き留めます
次のコマンドを使用して、そのコンテナを停止および削除しますdocker stop PID
docker rm PID
今docker-composeを実行すると、必要なポートを解放したのでサービスが実行されます。