{"id":582,"title":"windows\u4e0b\u57fa\u4e8edocker+hyperf\u6784\u5efa\u5fae\u670d\u52a1\u5b9e\u6218\u8be6\u7ec6\u6559\u7a0b\uff0c\u4eb2\u6d4b\u6210\u529f","good":0,"bad":0,"hit":2419,"created_at":"2023-02-11 08:01:49","content":"

\u76f8\u4fe1\u5f88\u591a\u4eba\u6839\u636ehyperf\u5b98\u7f51\u6587\u6863\u6216\u7f51\u4e0a\u7684\u8d44\u6599\u642d\u5efa\u5fae\u670d\u52a1\u65f6\u90fd\u5f88\u96be\u6210\u529f\uff0c\u5927\u725b\u5199\u7684\u6280\u672f\u6587\u6863\u5f88\u591a\u7ec6\u8282\u90fd\u7701\u7565\u4e86\uff0c\u800c\u4e14\u4e0d\u540c\u7684\u73af\u5883\u4f1a\u6709\u5f88\u591a\u7f51\u7edc\u95ee\u9898\u9700\u8981\u89e3\u51b3\uff0c\u5bfc\u81f4\u5f88\u591a\u4eba\u653e\u5f03\u4e86\uff1b<\/p>

\u4eca\u5929\u5728windows\u4e0a\u7528Docker Desktop\u8f6f\u4ef6\u73a9\u4e86\u4e00\u4e0b\uff0c\u7531\u4e8e\u6ca1\u6709wifi,\u7528\u7684\u624b\u673a\u70ed\u70b9\uff0c\u7f51\u7edc\u7279\u522b\u4e0d\u597d\uff0c\u5751\u5f88\u591a\uff1b<\/p>

\u73af\u5883\uff1a<\/p>

windows+docker descktop+consul+hyperf<\/p>

<\/p>

\u76f8\u5173\u6587\u4ef6\u7684\u4fee\u6539\u53c2\u8003\u5b98\u65b9\u6587\u6863\uff1a<\/p>

JSON RPC \u670d\u52a1 (hyperf.wiki)<\/a><\/p>

\u670d\u52a1\u63d0\u4f9b\u8005\u7aef\u53e3\uff1a80+9504<\/span><\/p>

gitee\u4ed3\u5e93\u5730\u5740\uff1ahyperf_rpc_provider (gitee.com)<\/a><\/span><\/p>

\u9700\u8981\u4fee\u6539\u7684\u6587\u4ef6<\/p>

\"image.png\"\/<\/p>

\u670d\u52a1\u6d88\u8d39\u8005\u5546\u54c1\uff1a9501<\/span><\/p>

gitee\u4ed3\u5e93\u5730\u5740\uff1a<\/span>hyperf_rpc_consumer (gitee.com)<\/a><\/p>

\u7ecf\u6d4bconsumer\u4e2d\u4e0d\u9700\u8981consul.php\u914d\u7f6e\uff0c\u53ef\u5220\u9664<\/p>

\"image.png\"\/<\/p>

\u8fd8\u6709\u4e2a.env\u6587\u4ef6\uff0c\u91cc\u9762\u914d\u7f6e\u4e86\u4e00\u4e2a\uff0c\u6839\u636e\u81ea\u5df1\u5b9e\u4f8b\u7684\u60c5\u51b5\u4fee\u6539<\/p>

#consul<\/span>CONSUL_ADDRESS=<\/span>http:\/\/192.168.43.128:8500<\/span><\/pre>

<\/p>

1\u3001DockerDesktop-> \u8bbe\u7f6e -> Docker \u5f15\u64ce ->\u201cfeatures\u201d: { buildkit: true}\u5c06"features": { buildkit: false}\uff0c\u4e0d\u7136docker pull \u65f6\u53ef\u80fd\u62c9\u4e0d\u4e0b\u6765\uff0c\u62a5\u7c7b\u4f3c\u8fd9\u6837\u7684\u9519\u8bef\uff1a<\/span><\/p>

failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to do request: Head "https:\/\/registry-1.docker.io\/v2\/hyperf\/hyperf\/manifests\/8.0-alpine-v3.12-swoole": unable to connect to 34.194.164.123:443. Do you need an HTTP proxy?<\/span><\/p>

<\/span><\/p>

2\u3001\u5236\u4f5cdocker image<\/span><\/p>

\u7531\u4e8ehyperf\u7684\u5883\u50cf\u9ed8\u8ba4\u90fd\u662f\u66b4\u9732\u76849501\u7aef\u53e3\uff0c\u5728\u540c\u4e00\u53f0\u7535\u8111\u4e0a\u542f\u52a8\u65f6\u4f1a\u6709\u51b2\u7a81\uff0c\u6211\u4eec\u8fd9\u91cc\u9700\u8981\u91cd\u65b0\u5728pull\u4e0b\u6765\u7684\u5883\u50cf\u57fa\u7840\u4e0a\u91cd\u65b0\u6784\u5efa\u7528\u4e8e\u670d\u52a1\u8005\u548c\u6d88\u8d39\u8005\u7684\u5883\u50cf,<\/span>\u4e3a\u4e86\u65b9\u4fbf\u5f00\u53d1\uff0c\u6211\u6ce8\u6d88\u4e86\u6587\u4ef6\u7684copy\u3001\u81ea\u542f\u52a8\u3001\u7aef\u53e3\uff08\u52a0\u7c97\u90e8\u5206\uff09\uff0c\u5236\u4f5c\u4e00\u4e2a\u4e0d\u590d\u5236\u6587\u4ef6\u5230\u955c\u50cf\uff0c\u4e5f\u4e0d\u5411\u5916\u66b4\u9732\u7aef\u53e3\u7684\u955c\u50cf\uff0c\u5b8c\u5168\u7531\u81ea\u5df2\u542f\u52a8\u5bb9\u5668\u65f6\u6302\u8f7d\u3001\u6307\u5b9a\u7aef\u53e3\uff0c\u624b\u52a8\u542f\u52a8<\/span><\/p>

\u6839\u636eDockerfile\u4e2d\u7684From\u62c9\u53d6\u955c\u50cf\uff1adocker pull <\/span>hyperf\/hyperf:8.0-alpine-v3.12-swoole<\/span><\/span><\/p>

\u5c06F:\\windows_linux\\hyperf_rpc_provider\u4e2d\u7684DockerFile\u6587\u4ef6\u4fee\u6539\u5982\u4e0b\uff0cF:\\windows_linux\\hyperf_rpc_consumer\u4e2d\u53ea\u9700\u8981\u5c06\u7aef\u53e3\u6539\u4e3a9504<\/span><\/p>

-------------------------------------------------------------------------------------------------------------------------------------------------------<\/span><\/p>

<\/span><\/p>

# Default Dockerfile<\/p>

#<\/p>

# @link     https:\/\/www.hyperf.io<\/p>

# @document https:\/\/hyperf.wiki<\/p>

# @contact  group@hyperf.io<\/p>

# @license  https:\/\/github.com\/hyperf\/hyperf\/blob\/master\/LICENSE<\/p>

<\/p>

FROM hyperf\/hyperf:8.0-alpine-v3.12-swoole<\/p>

LABEL maintainer="Hyperf Developers <group@hyperf.io>" version="1.0" license="MIT" app.name="Hyperf"<\/p>

<\/p>

##<\/p>

# ---------- env settings ----------<\/p>

##<\/p>

# --build-arg timezone=Asia\/Shanghai<\/p>

ARG timezone<\/p>

<\/p>

ENV TIMEZONE=${timezone:-"Asia\/Shanghai"} \\<\/p>

    APP_ENV=prod \\<\/p>

    SCAN_CACHEABLE=(true)<\/p>

<\/p>

# update<\/p>

RUN set -ex \\<\/p>

    # show php version and extensions<\/p>

    && php -v \\<\/p>

    && php -m \\<\/p>

    && php --ri swoole \\<\/p>

    #  ---------- some config ----------<\/p>

    && cd \/etc\/php8 \\<\/p>

    # - config PHP<\/p>

    && { \\<\/p>

        echo "upload_max_filesize=128M"; \\<\/p>

        echo "post_max_size=128M"; \\<\/p>

        echo "memory_limit=1G"; \\<\/p>

        echo "date.timezone=${TIMEZONE}"; \\<\/p>

    } | tee conf.d\/99_overrides.ini \\<\/p>

    # - config timezone<\/p>

    && ln -sf \/usr\/share\/zoneinfo\/${TIMEZONE} \/etc\/localtime \\<\/p>

    && echo "${TIMEZONE}" > \/etc\/timezone \\<\/p>

    # ---------- clear works ----------<\/p>

    && rm -rf \/var\/cache\/apk\/* \/tmp\/* \/usr\/share\/man \\<\/p>

    && echo -e "\\033[42;37m Build Completed :).\\033[0m\\n"<\/p>

<\/p>

#WORKDIR \/opt\/www<\/strong><\/p>

<\/p>

# Composer Cache<\/p>

# COPY .\/composer.* \/opt\/www\/<\/p>

# RUN composer install --no-dev --no-scripts<\/p>

<\/p>

#COPY . \/opt\/www<\/strong><\/p>

#RUN composer install --no-dev -o && php bin\/hyperf.php<\/strong><\/p>

<\/p>

#EXPOSE 9501<\/span><\/p>

<\/p>

#ENTRYPOINT ["php", "\/opt\/www\/bin\/hyperf.php", "start"]<\/strong><\/p>

-------------------------------------------------------------------------------------------------------------------------------------------------------<\/span><\/p>

\u539f\u521b\u4e0d\u6613\uff0c\u8f6c\u578b\u8bf7\u4fdd\u7559\u6b64\u94fe\u63a5\uff1ahttp:\/\/www.hu-rong.com\/article\/582<\/a><\/span><\/p>

<\/p>

3\u3001\u6784\u5efa\u65b0\u7684docker\u5883\u50cf\uff0c\u5728provider\u9879\u76ee\u6839\u76ee\u5f55\u4e0b\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff0c\u6ce8\u610f\u6700\u540e\u9762\u6709\u4e2a\u70b9<\/span><\/span><\/p>

docker build -t jsonrpc-http .<\/span><\/p>

\u5883\u50cf\u5236\u4f5c\u597d\u4e86\uff1a<\/span><\/p>

<\/span><\/p>

C:\\Users\\Administrator>docker images<\/p>

REPOSITORY                                      TAG                               IMAGE ID       CREATED         SIZE<\/p>

jsonrpc-http                                    latest                            4bb1445a70e8   41 hours ago    138MB<\/p>

\u4e0d\u719fdocker build\u7684\u4e5f\u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0\uff1a<\/span><\/span>\u7528dockerfile\u5236\u4f5claravel\u9879\u76ee\u955c\u50cf (http:\/\/www.hu-rong.com\/article\/561)<\/span><\/span><\/a><\/p>

<\/p>

4\u3001\u542f\u52a8\u5bb9\u5668<\/p>

\u521b\u5efa\uff08\u4e34\u65f6--rm\u53c2\u6570\uff0c\u52a0\u4e86\u7684\u8bdd\u9000\u51fa\u5bb9\u5668\u5c31\u4f1a\u81ea\u52a8\u5220\u9664)docker\u5bb9\u5668\uff0c\u68c0\u67e5\u4f9d\u8d56\u662f\u5426\u5b8c\u6574\uff08\u7ea2\u8272\u90e8\u5206\u6539\u6210\u81ea\u5df1\u9879\u76ee\u7684\u76ee\u5f55,\u8fd9\u91cc\u6709\u4e24\u4e2a\u76ee\u5f55\uff0c\u4e00\u4e2a\u662fhyerf_rpc_provider\u4e00\u4e2a\u662fhyperf_rpc_consumer)<\/p>

\u7279\u522b\u8981\u6ce8\u518c\uff0c\u5982\u679c\u7528docker\u542f\u52a8consul\\provider\\consumer\u4e09\u8005\u542f\u52a8\u65f6\uff0c\u4efb\u4e00\u4e2a\u6307\u5b9a\u4e86\u53c2\u6570network,\u5fc5\u987b\u4fdd\u6301\u4e09\u4e2a\u5bb9\u5668\u542f\u52a8\u540e\u5728\u540c\u4e00\u4e2a\u7f51\u7edc\uff0c\u5426\u5219\u4f1a\u62a5\uff1a<\/strong><\/span><\/p>

 Cannot select any node from load balancer.[24] in \/www\/vendor\/hyperf\/load-balancer\/src\/Random.php<\/strong><\/span><\/p>

\u8fd9\u4e2a\u6211\u770b\u6846\u67b6\u4ee3\u7801\u4e5f\u6ca1\u6709\u67e5\u51fa\u6765\u662f\u4ec0\u4e48\u539f\u56e0\uff0c\u540e\u6765\u6000\u7591\u662f\u7f51\u7edc\u95ee\u9898\uff0c\u6392\u67e5\u542f\u52a8\u540e\u7684\u5bb9\u5668\u53d1\u73b0consul\u6307\u5b9a\u4e86\u7f51\u7edc\uff0c\u800cprovider\u548cconsumer\u6ca1\u6709\u6307\u5b9a\uff0c\u5bfc\u81f4provider\u6ce8\u518c\u5230consul\u4e2d\u7684\u5730\u5740\uff0c\u5728consumer\u62c9\u53d6\u4e0b\u6765\u540e\u65e0\u6cd5\u8bbf\u95ee\uff0c\u6b63\u5e38\u7684\u60c5\u51b5\u5e94\u8be5\u662f\u5728provider\u548cconsumer\u4e2d\u5e94\u4e92\u76f8ping\u901a\u5bf9\u65b9\u7684ip<\/strong><\/span><\/p>

tip:\u4e0d\u6307\u5b9a\u7f51\u7edc\u542f\u52a8\uff08\u7528\u9ed8\u8ba4\u7f51\u7edc\uff09<\/span><\/p>

docker run -it  --rm  -v F:\\windows_linux\\hyperf_rpc_provider:\/www<\/span><\/span>--entrypoint bash registry.cn-shanghai.aliyuncs.com\/hu-rong\/com:hyperf-7.4-v1<\/p>

tips:\u6307\u5b9a\u7f51\u7edc\u542f\u52a8\u65b9\u5f0f<\/span><\/p>

docker run -it --rm --name provider -p 9504:9504 -p 80:80  --network hurong_www_gitee_127.0.0.1<\/span> -v F:\\windows_linux\\hyperf_rpc_provider:\/www --entrypoint bash jsonrpc-http<\/p>

docker run -it --rm --name consumer -p 9501:9501  --network hurong_www_gitee_127.0.0.1<\/span> -v F:\\windows_linux\\hyperf_rpc_consumer:\/www --entrypoint bash jsonrpc-http<\/p>

<\/p>

5\u3001\u8bbe\u7f6e\u955c\u50cf\u52a0\u901f<\/p>

\u7531\u4e8e\u7f51\u7edc\u4e0d\u597d\uff0c\u767b\u5f55\u5230\u5bb9\u5668\u540e\uff0c\u9700\u8bbe\u7f6e\u5883\u50cf\u52a0\u901f\uff0c\u4e0d\u7136\u53ef\u80fd\u4f1a\u62a5\u4ee5\u4e0b\u9519\u8bef\uff0c\u89e3\u51b3\u65b9\u6cd5\uff1a<\/p>

curl error 28 while downloading https:\/\/repo.packagist.org\/packages.json: SSL connection timeout<\/p>

\u767b\u5f55provider\/consumer\u5bb9\u5668\u540e\u8bbe\u7f6e\u955c\u50cf\u52a0\u901f<\/p>

tips:\u767b\u5f55\u547d\u4ee4docker exec -it provider \/bin\/bash<\/p>

\u8bbe\u7f6e\u963f\u91cc\u4e91\u955c\u50cf\u52a0\u901f\uff1a<\/p>

composer config -g repo.packagist composer https:\/\/mirrors.aliyun.com\/composer\/   <\/span><\/p>

<\/p>

6\u3001\u4e0b\u8f7dhyperf\u9879\u76ee\u4ee3\u7801<\/span><\/p>

hyperf-rpc\u5168\u65b0\u5b89\u88c5\uff1a<\/p>

\u767b\u5f55\u5bb9\u5668\u540e\u5728provider\u548cconsumer\u4e2d\u5207\u6362\u5230\/www\u76ee\u5f55\u4e0b\uff08\u542f\u52a8\u65f6\u6302\u8f7d\u7684\u662f\u4ec0\u4e48\u5c31\u5207\u6362\u5230\u4ec0\u4e48\uff09<\/p>

composer create-project hyperf\/hyperf-skeleton <\/strong><\/p>

Whicp RPC protocol do you want to use?<\/p>

\u9009\uff1aJSON RPC with Service Governance\uff0c\u5176\u5b83\u6839\u636e\u9700\u8981\u9009\u62e9\uff0c\u8fd9\u91cc\u4e0d\u9700\u8981\u5176\u5b83\u7684\u5168\u90e8\u56de\u8f66<\/strong><\/p>

\u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u5728provider\u53caconsumer\u4e2d\u68c0\u67e5\u662f\u5426\u6709\u4ee5\u4e0b\u4f9d\u8d56\uff0c\u6ca1\u6709\u7684\u5b89\u88c5\u4e00\u4e0b\uff1a<\/p>

composer require hyperf\/json-rpc<\/span><\/p>

composer require hyperf\/rpc-server<\/span><\/p>

composer require hyperf\/rpc-client<\/span><\/p>

hyperf\/service-governance<\/span><\/p>

\u8fd9\u91cc\u7684\u7528consul\uff0c\u8fd8\u9700\u8981\u5b89\u88c5<\/span><\/p>

composer require hyperf\/service-governance-consul<\/span><\/p>

\u670d\u52a1\u63d0\u4f9b\u8005\u4e2d\u9700\u5b89\u88c5\uff1a<\/p>

composer require hyperf\/consul<\/p>

provider\u4e2d\u751f\u6210consul\u914d\u7f6e\u6587\u4ef6<\/p>

php bin\/hyperf.php vendor:publish hyperf\/consul<\/p>

<\/p>

6\u3001\u4fee\u6539consul\u914d\u7f6e<\/span><\/p>

\u6ce8\u610f\uff1a\u5982\u679c\u662f\u5728windows\u4e0b\u540c\u4e00\u53f0\u673a\u5668\u4e0a\u7528docker\u6d4b\u8bd5\uff0c\u6ce8\u610f\u5c06consul\u6ce8\u518c\u4e2d\u5fc3\u7684ip\u6539\u6210windows\u4e3b\u673a\u7684ip(\u6211\u8fd9\u91cc\u7684\u662fhttp:\/\/192.168.43.128:8500\uff09,\u9ed8\u8ba4\u7684http:\/\/127.0.0.1:8500\u662f\u8bbf\u95ee\u4e0d\u5230\u7684\uff0c\u5c31\u4e00\u76f4\u65e0\u6cd5\u6ce8\u518c\u6210\u529f\uff1b <\/span><\/p>

<\/p>

7\u3001\u542f\u52a8provider\u548cconsumer<\/span><\/p>

<\/span><\/p>

bash-5.0# cd \/www\/<\/p>

bash-5.0# php bin\/hyperf.php<\/p>

provider\u542f\u52a8\u6210\u529f\u540e\u4f1a\u770b\u5230\u670d\u52a1\u6ce8\u518c\u6210\u529f\u7684\u63d0\u793a<\/span><\/p>

<\/span><\/p>

[INFO] Service CalculatorService:CalculatorService-2 register to the consul successfully.<\/strong><\/span><\/p>

[DEBUG] Event Hyperf\\Framework\\Event\\MainWorkerStart handled by Hyperf\\ServiceGovernance\\Listener\\RegisterServiceListener listener.<\/p>

[INFO] Worker#0 started.<\/p>

[INFO] HTTP Server listening at 0.0.0.0:9504<\/strong><\/p>

[INFO] HTTP Server listening at 0.0.0.0:80<\/strong><\/p>

\u68c0\u67e5\u7aef\u53e3\uff1a<\/strong><\/p>

F:\\windows_linux\\hyperf_rpc_provider>docker ps<\/p>

CONTAINER ID   IMAGE                   COMMAND                  CREATED         STATUS          PORTS                                                                                                         NAMES<\/p>

446cb78e8d49   rpc\/provider            "bash"                   7 seconds ago   Up 6 seconds    0.0.0.0:80->80\/tcp, 0.0.0.0:9504->9504\/tcp<\/span>                                               provider<\/p>

c34c8e92379d   rpc\/consumer            "bash"                   8 minutes ago   Up 8 minutes    0.0.0.0:9501->9501\/tcp <\/span>                                                                            consumer<\/p>

\u8bbf\u95ee\u6d4b\u8bd5\uff1a<\/p>

\u8bbf\u95eeProvider:<\/p>

localhost:9504<\/a> \u770b\u5230\u5982\u4e0b\u4fe1\u606f\u8868\u793a\u6b63\u5e38<\/p>

{<\/p>

"jsonrpc": "2.0",<\/p>

"id": null,<\/p>

"error": {<\/p>

"code": -32601,<\/p>

"message": "Method not found.",<\/p>

"data": null<\/p>

},<\/p>

"context": []<\/p>

}<\/p>

\u8bbf\u95eeConsumer:<\/p>

localhost:9501<\/a><\/p>

\u6b64\u65f6\u8fd8\u4e0d\u80fd\u8bbf\u95ee\uff0c\u56e0\u4e3aprovider\u6ce8\u518c\u5230consul\u4e2d\u7684ip\u4e3a\u5bb9\u5668\u5185\u7684ip,consumer\u65e0\u6cd5\u8bbf\u95ee\u5230\uff0c\u8fd9\u4e2a\u95ee\u9898\u540e\u9762\u518d\u89e3\u51b3\uff0c\u8fd9\u4e5f\u662f\u4e0b\u9762\u7684consul\u754c\u9762\u4e2d\u6ce8\u518c\u7684\u670d\u52a1\u524d\u4e3a\u4ec0\u4e48\u6709\u4e2aX\u7684\u539f\u56e0<\/p>

tips:\u8fd9\u4e2a\u95ee\u9898\u5df2\u89e3\u51b3\uff0c\u5c31\u662f\u524d\u9762\u8bb2\u7684\u542f\u52a8consul\/provider\/consumer\u65f6\u9700\u8981\u5728\u540c\u4e00\u4e2a\u7f51\u7edc<\/p>

\"image.png\"\/<\/p>

8\u3001\u767b\u5f55consul\u68c0\u67e5\u670d\u52a1\uff0c\u80fd\u770b\u5230CalculatorService\u4e14\u6ca1\u6709\u7ea2\u53c9\uff0c\u8868\u793a\u6ce8\u518c\u6210\u529f<\/strong><\/p>

\"image.png\"\/<\/strong><\/p>

\u8bbf\u95eelocalhost:9501<\/a>\u80fd\u770b\u5230\u6b63\u5e38\u8fd4\u56de\u7ed3\u679c\u8868\u793a\u6210\u529f<\/span><\/strong><\/p>

\"image.png\"\/<\/strong><\/p>

<\/span><\/p>"}