簡體   English   中英

連接本地 docker-compose 容器 Windows 10

[英]Connecting to local docker-compose container Windows 10

問題非常相似,我無法從 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:

I can start the containers with docker-compose -f docker-compose.yml up -d and there are no errors when I check the logs with docker logs my_app_django or docker logs my_app_nginx . 此外,執行docker ps顯示所有容器按應有的方式運行。

這個問題的奇怪之處在於,在 Linux 上,一切運行都沒有問題,我可以在端口 80 的 localhost 上找到我的應用程序。當我在 Windows 上時,唯一不同的是我在 my.sh 文件上運行dos2unix以確保它們正常運行。 如果我省略這一步,那么我會得到很多錯誤,這讓我相信我必須這樣做。

如果有人可以就我可能做錯了什么或完全遺漏什么提供指導/建議,我將不勝感激。 我也很樂意提供更多細節,請告訴我。 謝謝!

編輯#1:正如timur建議的那樣,我做了一個docker run -p 80:80 -d nginx ,這里是 output:

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(一個用於后端,一個用於前端)

后端 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 支持的Docker 工具箱,而不是 Windows 的默認Hyper-V Docker。 在這種情況下,您可能會將其視為實際運行 Docker 的 VBox VM - 因此所有卷安裝和端口映射都適用於docker 機器 VM ,而不是您的主機。 而管理工具(即 Docker 終端和docker-compose )實際上通過MinGW您的主機操作系統上運行。


因此,默認情況下,您不會在localhost上獲得綁定端口(但如果您願意,可以通過在VirtualBox 中手動編輯 VM 屬性來實現這一點 - 我剛剛搜索了一些圖片教程的第二個鏈接)。 令人驚訝的是,關於這個特定主題的官方文檔非常稀缺——你可以通過查看他們的示例來獲得提示。

所以在你的情況下,正確的 url 應該是http://192.168.99.100


這兩種解決方案之間的另一個不同之處是卷安裝。 再一次, 文檔有點暗示它應該是什么,但我不能為你指出一個更明確的來源。 您可能已經注意到您用於所有 docker 交互的終端對路徑的編碼略有不同(我推測是因為MinGW 層)並且轉換后的路徑被發送到 docker-machine - 因為它是 Linux 並且不會處理 Windows 樣式的路徑反正。

從這里我看到了一些可供您探索的途徑:

C:\Users\...\MyProject運行您的項目

文檔所述,默認情況下,您將c:\Users安裝到/c/Users中。 所以理論上,如果您從用戶主文件夾運行docker-compose - 路徑應該自動對齊 - 但由於您遇到此問題 - 您可能是從其他地方運行它。

創建另一個共享

您還可以在 Virtual Box 中創建自己的安裝支架 在終端中運行pwd並注意項目根目錄的位置。 然后使用 Virtual Vox UI 並創建一個路徑,使其與您的目錄樹對齊(例如, D:\MyProject\/d/MyProject

希望這也不需要您更改docker-compose.yml

或者,切換到 Hyper-V Docker 桌面 - 這些特殊問題將 go 消失。

請記住,Hyper-V 不會與 VirtualBox 共存。 因此,如果您需要 VBox 來做其他事情,這個選項可能對您不可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM