簡體   English   中英

有沒有辦法讓 localhost 在 docker(對於 mac)容器中的 CLI 環境中可用?

[英]Is there a way to make localhost available from the CLI environment in a docker (for mac) container?

我有兩個 docker 容器,分別稱為 php-cli 和 nginx。 他們在我的mac上運行。 我的 docker-compose 文件看起來很像這樣:

version: "2.1"
services:
    php-cli:
        image: myproject/php-fpm
        container_name: myproject_php-cli
        user: www-data
        entrypoint: bash
        depends_on:
            - nginx
        networks:
            - default
    nginx:
        image: nginx:1.13.5-alpine
        container_name: myproject_nginx
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - ./:/usr/src/app:cached
            - ./.docker/nginx/app.conf:/etc/nginx/conf.d/default.conf
            - ./.docker/nginx/fastcgi.conf:/etc/nginx/fastcgi.conf
        networks:
            - default

如果我打開瀏覽器並訪問localhost ,我會得到一個很好的文件索引。 但是當我登錄到php-cli容器時, curl --verbose "localhost"我得到以下信息:

* Rebuilt URL to: localhost/
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* connect to 127.0.0.1 port 80 failed: Connection refused
*   Trying ::1...
* Immediate connect fail for ::1: Cannot assign requested address
* Failed to connect to localhost port 80: Connection refused
* Closing connection 0
curl: (7) Failed to connect to localhost port 80: Connection refused

我發現一篇博客文章說要使用host.docker.internal ,但是雖然它在容器內有效,但在我的瀏覽器中失敗了。 由於我正在設置一個挑剔的應用程序設置文件,因此我需要能夠將應用程序指向一個基地址,該地址可以在主機(瀏覽器)和容器內部(curl)工作。 我不能使用兩個不同的地址。 我也不能使用 nginx 容器的名稱,因為它只能在我的 php-cli 容器中使用,而不能從瀏覽器中使用。

有沒有辦法讓我從我的 php-cli 容器中訪問localhost ,而無需指定我的 nginx 容器的名稱,也無需使用 host.docker.internal? 如果是這樣,我該怎么做?

===

更新:我嘗試將以下內容添加到 docker-compose.yaml: extra_hosts: - "localhost:host.docker.internal"

...但我得到了這個作為獎勵:

錯誤:無法為服務 php-cli 創建容器:添加主機中的 IP 地址無效:“host.docker.internal”

哦,好吧——值得一試。

這是我放入docker-compose.yml文件的nginx定義區域的內容:

nginx:
    image: nginx:1.13.5-alpine
    ...
    networks:
        mynetworkname:
              ipv4_address: "172.20.0.8"

...然后我修改了php-cli容器定義,如下所示:

php-cli:
    image: tcs/php-fpm:5.4-sudo
    ...
    extra_hosts:
        - "localhost:172.20.0.8"

...現在它可以工作了。 請注意,我必須在文件頂部單獨定義網絡,而不是依賴default 所以現在docker-compose.yml文件的頂部看起來像:

networks:
    mynetworkname:
        ipam:
            config:
                - subnet: 172.20.0.0/24

所以,是的,這里相關的、谷歌可用的部分是ipv4_addressextra_hosts

這是否涉及在我的 docker 群的設置方式中造成顯着的脆弱性? 是的。 我推薦它用於大多數用例嗎? ,但是當其他選項失敗時,它適用於我的特定場景。 我希望它可以幫助某人。

暫無
暫無

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

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