この質問と非常によく似ていますが、Windows 10のブラウザー(Firefox)からローカルのdocker-composeコンテナーに接続できず、しばらくの間トラブルシューティングを行っていますが、問題を見つけることができないようです。
これが私のdocker-compose.ymlです:
version: "3"
services:
frontend:
container_name: frontend
build: ./frontend
ports:
- "3000:3000"
working_dir: /home/node/app/
environment:
DEVELOPMENT: "yes"
stdin_open: true
volumes:
- ./frontend:/home/node/app/
command: bash -c "npm start & npm run build"
my_app_django:
container_name: my_app_django
build: ./backend/
environment:
SECRET_KEY: "... not included ..."
command: ["./rundjango.sh"]
volumes:
- ./backend:/code
- media_volume:/code/media
- static_volume:/code/static
expose:
- "443"
my_app_nginx:
container_name: my_app_nginx
image: nginx:1.17.2-alpine
volumes:
- ./nginx/nginx.dev.conf:/etc/nginx/conf.d/default.conf
- static_volume:/home/app/web/staticfiles
- media_volume:/home/app/web/mediafiles
- ./frontend:/home/app/frontend/
ports:
- "80:80"
depends_on:
- my_app_django
volumes:
static_volume:
media_volume:
でコンテナを起動できますがdocker-compose -f docker-compose.yml up -d
、docker logs my_app_django
またはでログを確認してもエラーは発生しませんdocker logs my_app_nginx
。さらに、docker ps
実行すると、すべてのコンテナーが正常に実行されていることが示されます。
この問題の奇妙な部分は、Linuxではすべてが問題なく実行され、ローカルホストのポート80でアプリを見つけることができることです。Windowsを使用しているときに異なることはdos2unix
、.shファイルでを実行して確実にすることだけです。それらが適切に実行されること。この手順を省略すると、多くのエラーが発生し、これを実行する必要があると思われます。
私が間違っていることや完全に欠けていることについて誰かがガイダンス/アドバイスを与えることができれば、私は本当に感謝しています。また、詳細をお知らせしますので、お知らせください。ありがとうございました!
編集#1:timurが示唆したように、私はaを実行しdocker run -p 80:80 -d nginx
、ここに出力がありました:
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
bf5952930446: Pull complete
ba755a256dfe: Pull complete
c57dd87d0b93: Pull complete
d7fbf29df889: Pull complete
1f1070938ccd: Pull complete
Digest: sha256:36b74457bccb56fbf8b05f79c85569501b721d4db813b684391d63e02287c0b2
Status: Downloaded newer image for nginx:latest
19b56a66955145e4f59eefff57340b4affe5f7e0d82ad013742a60b479687c40
C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: driver failed programming external connectivity on endpoint naughty_hoover (8c7b2fa4aef964899c366e1897e38727bb7e4c38431875c5cb8456567005f368): Bind for 0.0.0.0:80 failed: port is already allocated.
これがエラーの原因かもしれませんが、現時点で何をする必要があるのかよくわかりません。
編集#2:要求に応じて、これが私のDockerfilesです(1つはバックエンド用、もう1つはフロントエンド用)
バックエンドDockerfile:
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN apt-get update && apt-get install -y imagemagick libxmlsec1-dev pkg-config
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code
フロントエンドDockerfile:
FROM node
WORKDIR /home/node/app/
COPY . /home/node/app/
RUN npm install -g react-scripts
RUN npm install
編集#3:私がそうするときdocker ps
、これは私が得るものです:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0da02ad8d746 nginx:1.17.2-alpine "nginx -g 'daemon of…" About an hour ago Up About an hour 0.0.0.0:80->80/tcp my_app_nginx
070291de8362 my_app_frontend "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:3000->3000/tcp frontend
2fcf551ce3fa my_app_django "./rundjango.sh" 12 days ago Up About an hour 443/tcp my_app_django
私たちが確立として、あなたは使用ドッカーツールボックスのVirtualBoxではなくによって支えられて、デフォルト Hyper-V
のWindows用ドッカーを。この場合、実際にDockerを実行するVBox VMと考えることができます。したがって、すべてのボリュームマウントとポートマッピングは、ホストではなくDockerマシンVMに適用されます。また、管理ツール(Dockerターミナルなどdocker-compose
)は、実際にはMinGWを介してホストOSで実行されます。
このためlocalhost
、デフォルトではバインディングポートをオンにしません(ただし、必要に応じてVirtualBoxのVMプロパティを手動で編集することでこれを実現できます。いくつかの画像チュートリアルの2番目のリンクをグーグルで検索しました)。驚いたことに、この特定のトピックに関する公式ドキュメントはかなり不足しています-しかし、それらの例を見ることでヒントを得ることができます。
http://192.168.99.100
これら2つのソリューションで異なるもう1つの点は、ボリュームマウントです。繰り返しになりますが、ドキュメントはそれがどうあるべきかを示唆していますが、より明確な情報源を指摘することはできません。お気づきかもしれませんが、すべてのDockerインタラクションに使用するターミナルは、パスのエンコードが少し異なり(MinGWレイヤーがあるためだと思います)、変換されたパスはdocker-machineに送信されます-Linuxであり、Windowsスタイルのパスを処理しないためですとにかく。
ここから、あなたが探索するためのいくつかの道が見えます:
C:\Users\...\MyProject
ドキュメントの状態、あなたが得るc:\Users
にマウントされ/c/Users
、デフォルトで。したがって、理論的には、docker-compose
ユーザーのホームフォルダーから実行する場合(パスは自動的に整列するはずです)、この問題が発生しているため、おそらく別の場所から実行している可能性があります。
VirtualBoxで独自のマウントマウントを作成することもできます。pwd
ターミナルで実行し、プロジェクトルートがどこにあるかをメモします。次に、Virtual Vox UIを使用して、ディレクトリツリーと整列するパスを作成します(たとえば、にD:\MyProject\
なるはず/d/MyProject
です。
うまくいけば、これはあなたがあなたのdocker-compose.yml
どちらかを変更する必要がないでしょう
Hyper-VはVirtualBoxと共存しないことに注意してください。したがって、他の目的でVBoxが必要な場合は、このオプションを使用できない可能性があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加