docker 相关笔记
Import-Module DockerCompletion | |
grpcurl -plaintext -proto hello.proto -d '{"name": "Alice"}' 10.60.32.253:9081 com.grpc.nacos.demo.HelloService.SayHello |
# docker 代理:
确保
Dockerfile中正确配置了代理:不可取,这样生成的镜像所构建的容器也会转发到该代理# 使用参数传入代理地址 ARG HTTP_PROXY ARG HTTPS_PROXY # 配置代理环境变量 ENV HTTP_PROXY=${HTTP_PROXY} ENV HTTPS_PROXY=${HTTPS_PROXY} ENV NO_PROXY=localhost,127.0.0.1,.example.com "registry-mirrors": [ "https://docker.domys.cc", "https://hub.domys.cc", "https://dockerproxy.com", "https://docker.nju.edu.cn", "https://mirror.baidubce.com" ],# 使用参数传入代理地址 ARG HTTP_PROXY ARG HTTPS_PROXY # 仅在特定命令中使用代理 RUN env http_proxy=${HTTP_PROXY} https_proxy=${HTTPS_PROXY} \ curl -O https://example.com/some-package.tar.gz # 其他命令不需要代理 RUN some-other-command检查
Clash的监听地址查看
Clash配置文件(通常是config.yaml或clash.yaml)中代理的监听地址:port: 7890 # HTTP/HTTPS 代理端口 socks-port: 7891 # SOCKS5 代理端口 allow-lan: true # 是否允许局域网访问代理 bind-address: 0.0.0.0 # 代理服务绑定的地址重点检查:
allow-lan是否设置为true,表示允许局域网访问。bind-address是否为0.0.0.0,表示监听所有接口(包括 Docker 的172.17.0.1)。
如果
allow-lan是false或未设置,则需要修改为true。运行构建命令时,正确传递代理地址:
sudo docker build -t nwpuapi-dashboard-arm64:1.0.0 . sudo docker build \ --build-arg HTTP_PROXY=http://172.16.0.13:7890 \ --build-arg HTTPS_PROXY=http://172.16.0.13:7890 \ -t koa-v-arm64:latest . # 指定dockerfile文件 docker build -t docker-local -f Dockerfile.local
# docker 修改容器并存为新镜像
使用
docker run -it --entrypoint /bin/bash 镜像名称进入容器终端修改之后新开终端使用
docker commit <容器ID或容器名称> 新镜像名称修改启动命令
docker commit --change='ENTRYPOINT ["/启动命令"]' --change='CMD ["启动参数"]' 容器id docker-local-with-changes docker commit --change='ENTRYPOINT ["/docker-entrypoint.sh"]' --change='CMD ["docker-start"]' 52e9ad70133f nwpuapi-arm64:2.0.2
docker run -it --entrypoint /bin/bash -c "unset http_proxy https_proxy" nwpuapi-arm64:2.0.1
# aisix 镜像,etcd 镜像,dashboard 镜像
需要创建一个网络:用于 APISIX 和其他服务之间的通信
docker network create nwpuapi-network启动 etcd 容器时将其加入上述创建的网络中,可以开启授权,公网也可以访问
docker run -d --name etcd --network=nwpuapi-network -p 2379:2379 quay.io/coreos/etcd:v3.5.5 etcd \ --advertise-client-urls=http://0.0.0.0:2379 \ --listen-client-urls=http://0.0.0.0:2379 docker run -d --name etcd --network=nwpuapi-network \ -p 2379:2379 -p 2380:2380 \ -e ALLOW_NONE_AUTHENTICATION=yes \ -e ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" \ -e ETCD_ADVERTISE_CLIENT_URLS="http://etcd:2379" \ bitnami/etcd:latest docker run -d --name etcd-server --network=nwpuapi-network \ -p 2379:2379 \ -p 2380:2380 \ quay.io/coreos/etcd:v3.5.5 \ etcd --data-dir=/etcd-data \ --advertise-client-urls http://0.0.0.0:2379 \ --listen-client-urls http://0.0.0.0:2379 docker run -d --name etcd-server --network=nwpuapi-network \ -p 0.0.0.0:2379:2379 \ -p 0.0.0.0:2380:2380 \ quay.io/coreos/etcd:v3.5.5 \ etcd --data-dir=/etcd-data \ --advertise-client-urls http://0.0.0.0:2379 \ --listen-client-urls http://0.0.0.0:2379注:这里
172.18.0.2为apisix-network网络分配给etcd-server的ip,可自行替换或使用0.0.0.0参数说明:
![1730797527759]()
在 APISIX 的
config.yaml文件中,将etcd的地址更新为etcd-server:2379,加入同一个网络可以直接使用容器名 + 端口访问etcd: host: - "http://etcd-server:2379"启动 apisix 容器时将其连接到上述创建的网络当中
docker run -d --name nwpuapi-test --network=nwpuapi-network -p 9080:9080 -p 9443:9443 -p 9180:9180 -p 9091:9091 -v $(pwd)/conf/config.yaml:/usr/local/apisix/conf/config.yaml nwpuapi-arm64:3.0.0 -e http_proxy="http://172.16.0.13:7890" -e https_proxy="http://172.16.0.13:7890" docker run -it --name apites --network=nwpuapi-network --entrypoint /bin/bash nwpuapi-arm64:2.0.1- 参数说明
![1730797082674]()
编辑
Dashboard的配置文件,确保apisix-dashboard容器连接到正确的etcd地址: 在apisix-dashboard的配置文件中(conf/conf.yaml),确保etcd地址设置为http://172.18.0.2:2379(dashboard使用容器名 + 端口只能读取不能修改etcd-server的内容):security为嵌入其他页面所必须,ip需要自行修改为待嵌入网页ipetcd: endpoints: - "http://172.18.0.2:2379" security: content_security_policy: "default-src 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; frame-src 192.168.226.128:3000"启动 Dashboard 容器: 运行以下命令,将 Dashboard 加入同一网络,并指定
etcd地址docker run -d --name nwpuapi-dashboard --network=nwpuapi-network \ -p 9000:9000 -v $(pwd)/conf/conf.yaml:/tmp/build/output/nwpuapi/dashboard/usr/local/nwpuapi/dashboard/conf/conf.yaml \ nwpuapi-dashboard-arm64:1.0.0
# zipkin 镜像:
下载镜像:
docker pull openzipkin/zipkin启动容器
docker run -d --name zipkin --network=apisix-network -p 9411:9411 openzipkin/zipkin
访问地址:
http://127.0.0.1:9411/zipkin路由示例:
curl http://127.0.0.1:9180/nwpuapi/admin/routes/zip -X PUT -d '
{"methods": ["GET"],
"uri": "/ip",
"plugins": {"zipkin": {"endpoint": "http://172.18.0.1:9411/api/v2/spans",
"sample_ratio": 1,
"service_name": "APISIX-nwpu",
"server_addr": "192.168.226.128"
}
},
"upstream": {"type": "roundrobin",
"nodes": {"httpbin.org:80": 1
}
}
}'
curl -i -X DELETE http://127.0.0.1:9180/nwpuapi/admin/routes/zip
# prometheus 镜像
下载镜像
docker pull prom/prometheus创建配置文件
prometheus.yaml,Prometheus就可以自动抓取指标数据,需要的是apisix所在环境ipscrape_configs:
- job_name: "apisix"
scrape_interval: 15s
metrics_path: "/prometheus/metrics"
static_configs:
- targets: ["172.18.0.1:9091"]
启动容器,挂载配置文件:
9090 端口被
apisix占用,映射到主机的 9092 端口docker run -d --name prometheus --network=nwpua-network \
-p 9092:9090 \
-v /home/wlp/apisixFile/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus访问地址:
http://localhost:9092/targets路由示例:
curl http://127.0.0.1:9180/nwpuapi/admin/routes/zip -X PUT -d '
{"uri": "/ip",
"plugins": {"prometheus": {}},
"upstream": {"type": "roundrobin",
"nodes": {"httpbin.org:80": 1
}
}
}'
curl http://127.0.0.1:9180/nwpuapi/admin/routes/1 \ -H "X-API-KEY: $admin_key" -X PUT -d ' { "methods": ["GET"], "uri": "/test/index.html", "plugins": { "response-rewrite": { "body": "{\"code\":\"ok\",\"message\":\"new json body\"}", "headers": { "set": { "X-Server-id": 3, "X-Server-status": "on", "X-Server-balancer-addr": "$balancer_ip:$balancer_port" } }, "vars":[ [ "status","==",200 ] ] } }, "upstream": { "type": "roundrobin", "nodes": { "127.0.0.1:80": 1 } } }'注意:
apisix的配置文件config.yaml:这个暴露的是内部访问端口
enable_control: true
control:
ip: "0.0.0.0"
port: 9090
默认启用
prometheus插件,该插件默认创建/prometheus/metrics接口,并通过独立的服务地址(默认为127.0.0.1:9091)暴露指标prometheus:
metric_prefix: apisix_
enable_export_server: true
export_uri: /prometheus/metrics
export_addr:
port: 9091
ip: 0.0.0.0
配置完成后,可以通过以下命令提取相关监控指标:
curl -i http://127.0.0.1:9091/prometheus/metrics
curl -i http://127.0.0.1:9080/ip
curl -i "http://127.0.0.1:9180/nwpuapi/admin/routes" -X PUT -d '
{
"id": "getting-started-ip",
"uri": "/ip",
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'
# grafana 镜像
下载镜像:
docker pull grafana/grafana创建配置文件
grafana.ini:允许嵌入、允许匿名登录、中文
[security]allow_embedding = true
[auth.anonymous]enabled = true
[users]default_language = zh-Hans
启动容器,挂载配置文件:
docker run -d --name grafana --network=apisix-network \
-p 3000:3000 \
-v /home/wlp/apisixFile/grafana.ini:/etc/grafana/grafana.ini \
grafana/grafana
登录 Grafana(默认地址为
http://127.0.0.1:3000),默认用户和密码均为admin。登录成功后,在当前页面单击Add your first data source,选择Prometheus,配置 URL 为http://172.18.0.1:9092或prometheus容器ip 9090![1741181835334]()
导入仪表盘,前往
grafana.com搜索apisix下载仪表盘json文件或复制id![image-20250305214009145]()
嵌入 仪表盘到
APISIX Dashboard,复制第五步界面的 url 将其粘贴到下图所示位置![image-20250305214322835]()
# nacos
实践:https://nacos.io/zh-cn/blog/apisix.html
使用 Node.js 的 Koa 框架在 3005 端口启动一个简单的测试服务作为上游。
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3005);
在命令行中通过请求 Nacos Open API 的方式进行服务注册。
bash startup.sh -m standalone
bash shutdown.shcurl http://127.0.0.1:9180/apisix/admin/routes/test -X PUT -i -d ' { "uri": "/nacos/*", "upstream": { "service_name": "APISIX-NACOS-name", "type": "roundrobin", "discovery_type": "nacos" } }'curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=APISIX-NACOS&ip=10.233.0.17&port=3005&ephemeral=false'
curl -X POST "http://10.60.32.253:8848/nacos/v2/ns/instance?serviceName=grpctestname&ip=10.233.0.14&port=50051&ephemeral=false"
curl -X POST "http://10.60.32.253:8848/nacos/v1/ns/instance?serviceName=api-breaker&ip=10.233.0.17&port=3013&ephemeral=false"
curl -X POST "http://nacos:nacos@10.60.32.253:8848/nacos/v2/ns/instance?serviceName=koa-3007&ip=10.233.0.17&port=3007&ephemeral=false"
curl -X POST "http://10.60.32.253:8848/nacos/v2/ns/instance?serviceName=v1_v2&ip=10.233.0.15&port=3006&username=nacos&password=nacos&ephemeral=false"
curl -X POST "http://10.60.32.253:8848/nacos/v1/ns/instance?serviceName=Version-V2&ip=10.233.0.17&port=3007&ephemeral=false"
curl http://10.60.32.253:9080/dev/Version-V2/api/healthcurl -X POST 'http://10.60.32.253:8848/nacos/v1/ns/instance?serviceName=LB&ip=10.233.0.17&port=3010&ephemeral=false'
curl -X POST 'http://10.233.0.16:9180/nacos/v1/ns/instance?serviceName=test.service&ip=10.0.0.1&port=8080&ephemeral=false'
curl -X DELETE "http://10.60.32.253:8848/nacos/v1/ns/instance?serviceName=testv2&groupName=DEFAULT_GROUP&ip=10.233.0.17&port=3006&ephemeral=false&username=nacos&password=nacos" curl -i http://10.60.32.253:9080/grpctest?name=worlddocker run --env PREFER_HOST_MODE=hostname --env MODE=standalone --env NACOS_AUTH_ENABLE=true --env NACOS_AUTH_TOKEN=NzkzZDE2YTA3MTc4YzE3ZGRlMjdiNTBkMTRmZTNjNjY5MGVhMThmMWIwOTdmMmNhM2YwM2M2OGI1OTkyN --env NACOS_AUTH_IDENTITY_KEY=$custom_server_identity_key --env NACOS_AUTH_IDENTITY_VALUE=$custom_server_identity_value -p 8848:8848 -p 9848:9848 nacos/nacos-server执行服务注册后使用以下命令查询当前服务情况。
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=APISIX-NACOS'
修改
apisix的配置文件discovery:nacos:host:- "http://127.0.0.1:8848"prefix: "/nacos/v1/"
fetch_interval: 30
weight: 100
timeout:connect: 2000
send: 2000
read: 5000
新增 Nacos 路由
使用 Apache APISIX 提供的 Admin API 创建一个新的路由,APISIX 通过
upstream.discovery_type字段选择使用的服务发现类型,upstream.service_name需要与注册中心的对应服务名进行关联,因此创建路由时指定服务发现类型为nacos。curl http://127.0.0.1:9180/nwpuapi/admins/routes/1 -X PUT -i -d '
{"uri": "/nacos/*",
"upstream": {"service_name": "APISIX-NACOS",
"type": "roundrobin",
"discovery_type": "nacos"
}
}'
使用以下命令发送请求至需要配置的路由。
curl -i http://127.0.0.1:9080/nacos/
curl -i http://localhost:9180/apisix/admins/routes
curl http://127.0.0.1:9180/apisix/admins/routes/gp \ | |
-H "X-API-KEY: $admin_key" -X PUT -d ' | |
{ | |
"uri": "/nacos/GP", | |
"plugins": { | |
"traffic-split": { | |
"rules": [ | |
{ | |
"weighted_upstreams": [ | |
{ | |
"upstream_id": "555802857492710080", | |
"timeout": { | |
"connect": 15, | |
"send": 15, | |
"read": 15 | |
}, | |
"weight": 1 | |
}, | |
{ | |
"weight": 1 | |
} | |
] | |
} | |
] | |
} | |
}, | |
"upstream": { | |
"service_name": "Version-V2", | |
"type": "roundrobin", | |
"discovery_type": "nacos" | |
} | |
}' |
curl http://127.0.0.1:9180/apisix/admins/routes/gp \ | |
-X PUT -d ' | |
{ | |
"uri": "/nacos/GP", | |
"plugins": { | |
"traffic-split": { | |
"rules": [ | |
{ | |
"weighted_upstreams": [ | |
{ | |
"upstream_id": "555802857492710080", | |
"weight": 1 | |
}, | |
{ | |
"weight": 1 | |
} | |
] | |
} | |
] | |
} | |
}, | |
"upstream_id": "555802897573479104" | |
}' |
curl http://127.0.0.1:9180/apisix/admin/routes/1 \ | |
-H "X-API-KEY: $admin_key" -X PUT -d ' | |
{ | |
"uri": "/index.html", | |
"plugins": { | |
"traffic-split": { | |
"rules": [ | |
{ | |
"match": [ | |
{ | |
"vars": [ | |
["http_release","==","new_release"] | |
] | |
} | |
], | |
"weighted_upstreams": [ | |
{ | |
"upstream_id": "555802857492710080", | |
} | |
] | |
} | |
] | |
} | |
}, | |
"upstream_id": "555802897573479104" | |
}' |
curl http://127.0.0.1:9080/index.html -H 'release: new_release'
# 测试转发 https
在 redirect 插件中将
http_to_https设置为true:curl -i -X PUT http://localhost:9180/apisix/admins/routes/csdn \
-H 'Content-Type: application/json' \
-d '{
"uri": "/nav/back-end",
"upstream": {"type": "roundrobin",
"nodes": [
{"host": "blog.csdn.net",
"port": 443,
"weight": 1
}
]
},
"plugins": {"redirect": {"http_to_https": true
}
}
}'
curl http://127.0.0.1:9180/apisix/admins/routes/csdn -X PUT -d '
{"uri": "/nav/back-end",
"host": "blog.csdn.net",
"plugins": {"redirect": {"http_to_https": true
}
}
}'
curl http://127.0.0.1:9180/apisix/admins/routes/csdn -X PUT -d '
{"uri": "/nav/back-end",
"upstream": {"type": "roundrobin",
"nodes": {"blog.csdn.net:443":1
}
},
"plugins": {"redirect": {"http_to_https": true
}
}
}'
使用 serverless 插件:
curl -i http://127.0.0.1:9180/apisix/admins/routes/csdn -X PUT -d '
{"uri": "/nav/back-end",
"plugins": {"serverless-pre-function": {"phase": "rewrite",
"functions": ["return function() if ngx.var.scheme == \"http\" and ngx.var.host == \"blog.csdn.net\" then ngx.header[\"Location\"] = \"https://blog.csdn.net\" .. ngx.var.request_uri; ngx.exit(ngx.HTTP_MOVED_PERMANENTLY); end; end"]
}
}
}'
curl -i -H 'Host: blog.csdn.net' http://127.0.0.1:9080/nav/back-end
# 删除的插件:
batch-requests
authz-casbin
authz-casdoor
authz-keycloak
cas-auth
forward-auth
hmac-auth
ldap-auth
opa
openid-connect
wolf-rbac
public-api
request-validation
uri-blocker
client-control
limit-req
aws-lambda
azure-functions
openfunction
openwhisk
serverless-post-function
serverless-pre-function
clickhouse-logger
datadog
google-cloud-logging
http-logger
kafka-logger
loggly
opentelemetry
request-id
rocketmq-logger
skywalking
skywalking-logger
sls-logger
splunk-hec-logging
syslog
tcp-logger
tencent-cloud-cls
udp-logger
ai
ext-plugin-post-req
gzip
kafka-proxy
mocking
proxy-cache
proxy-control
proxy-mirror
referer-restriction
# 未删插件:
prometheus
zipkin
response-rewrite
basic-auth:使用 basic-auth 插件可以将 Basic_access_authentication 添加到 Route 或 Service 中。
该插件需要与 Consumer 一起使用。API 的消费者可以将它们的密钥添加到请求头中以验证其请求。
jwt-auth: jwt-auth 插件用于将 JWT 身份验证添加到 Service 或 Route 中。
通过 Consumer 将其密匙添加到查询字符串参数、请求头或 cookie 中用来验证其请求。
key-auth: key-auth 插件用于向 Route 或 Service 添加身份验证密钥(API key)。
它需要与 Consumer 一起配合才能工作,通过 Consumer 将其密钥添加到查询字符串参数或标头中以验证其请求。
consumer-restriction: consumer-restriction 插件允许用户根据 Route、Service、Consumer 或 Consumer Group 来设置相应的访问限制。
api-breaker: api-breaker 插件实现了 API 熔断功能,从而帮助我们保护上游业务服务。
关于熔断超时逻辑,由代码逻辑自动按触发不健康状态的次数递增运算:
当上游服务返回 unhealthy.http_statuses 配置中的状态码(默认为 500 ),并达到 unhealthy.failures 预设次数时(默认为 3 次),则认为上游服务处于不健康状态。
第一次触发不健康状态时,熔断 2 秒。超过熔断时间后,将重新开始转发请求到上游服务,如果继续返回 unhealthy.http_statuses 状态码,记数再次达到 unhealthy.failures 预设次数时,熔断 4 秒。依次类推(2,4,8,16,……),直到达到预设的 max_breaker_sec 值。
当上游服务处于不健康状态时,如果转发请求到上游服务并返回 healthy.http_statuses 配置中的状态码(默认为 200 ),并达到 healthy.successes 次时,则认为上游服务恢复至健康状态。
cors: cors 插件可以让你轻松地为服务端启用 CORS(Cross-Origin Resource Sharing,跨域资源共享)的返回头。
csrf: csrf 插件基于 Double Submit Cookie 的方式,保护用户的 API 免于 CSRF 攻击。
在此插件运行时, GET 、 HEAD 和 OPTIONS 会被定义为 safe-methods ,其他的请求方法则定义为 unsafe-methods 。因此 GET 、 HEAD 和 OPTIONS 方法的调用不会被检查拦截。
fault-injection: fault-injection 插件是故障注入插件,该插件可以和其他插件一起使用,并在其他插件执行前被执行。
ip-restriction: ip-restriction 插件可以通过将 IP 地址列入白名单或黑名单来限制对服务或路由的访问。
支持对单个 IP 地址、多个 IP 地址和类似 10.10.10.0/24 的 CIDR(无类别域间路由)范围的限制。
ua-restriction: ua-restriction 插件可以通过将指定 User-Agent 列入白名单或黑名单的方式来限制对服务或路由的访问。
一种常见的场景是用来设置爬虫规则。 User-Agent 是客户端在向服务器发送请求时的身份标识,用户可以将一些爬虫程序的请求头列入 ua-restriction 插件的白名单或黑名单中。
limit-conn: limit-conn 插件用于限制客户端对单个服务的并发请求数。当客户端对路由的并发请求数达到限制时,可以返回自定义的状态码和响应信息。
limit-count: limit-count 插件使用固定时间窗口算法,主要用于限制单个客户端在指定的时间范围内对服务的总请求数,并且会在 HTTP 响应头中返回剩余可以请求的个数。该插件原理与 GitHub API 的速率限制类似。
traffic-split: traffic-split 插件可以通过配置 match 和 weighted_upstreams 属性,从而动态地将部分流量引导至各种上游服务。该插件可应用于灰度发布和蓝绿发布的场景。
match 属性是用于引导流量的自定义规则, weighted_upstreams 属性则用于引导流量的上游服务。当一个请求被 match 属性匹配时,它将根据配置的 weights 属性被引导至上游服务。你也可以不使用 match 属性,只根据 weighted_upstreams 属性来引导所有流量。
file-logger: file-logger 插件可用于将日志数据存储到指定位置。
real-ip: real-ip 插件用于动态改变传递到 Apache APISIX 的客户端的 IP 地址和端口。
它的工作方式和 NGINX 中的 ngx_http_realip_module 模块一样,并且更加灵活。
grpc-transcode:使用 grpc-transcode 插件可以在 HTTP 和 gRPC 请求之间进行转换。
APISIX 接收 HTTP 请求后,首先对请求进行转码,并将转码后的请求转发到 gRPC 服务,获取响应并以 HTTP 格式将其返回给客户端。
grpc-web: grpc-web 插件是一个代理插件,可以处理从 JavaScript 客户端到 gRPC Service 的 gRPC Web 请求。
proxy-rewrite: proxy-rewrite 是处理上游代理信息重写的插件,支持对 scheme 、 uri 、 host 等信息进行重写。
zipkin.lua
config.lua
api_router.lua
exporter.lua
# docker compose
version: '3.8' | |
services: | |
etcd: | |
image: etcd:v3.5.5 | |
container_name: etcd | |
networks: | |
- nwpuapi-network | |
ports: | |
- "2379:2379" | |
command: > | |
etcd | |
--advertise-client-urls=http://etcd:2379 | |
--listen-client-urls=http://0.0.0.0:2379 | |
restart: always | |
nwpuapi: | |
image: nwpuapi:3.0.3 | |
container_name: nwpuapi | |
networks: | |
- nwpuapi-network | |
ports: | |
- "9080:9080" | |
- "9443:9443" | |
- "9180:9180" | |
- "9091:9091" | |
volumes: | |
- /home/wlp/apisixFile/config.yaml:/usr/local/apisix/conf/config.yaml | |
restart: always | |
depends_on: | |
- etcd | |
nwpuapi-dashboard: | |
image: nwpuapi-dashboard:5.0.0 | |
container_name: nwpuapi-dashboard | |
networks: | |
- nwpuapi-network | |
ports: | |
- "9000:9000" | |
volumes: | |
- /home/wlp/apisixFile/conf/conf.yaml:/tmp/build/output/nwpuapi/dashboard/usr/local/nwpuapi/dashboard/conf/conf.yaml | |
restart: always | |
depends_on: | |
- etcd | |
zipkin: | |
image: openzipkin/zipkin | |
container_name: zipkin | |
networks: | |
- nwpuapi-network | |
ports: | |
- "9411:9411" | |
restart: always | |
prometheus: | |
image: prom/prometheus | |
container_name: prometheus | |
networks: | |
- nwpuapi-network | |
ports: | |
- "9092:9090" | |
volumes: | |
- /home/wlp/apisixFile/prometheus.yml:/etc/prometheus/prometheus.yml | |
restart: always | |
grafana: | |
image: grafana/grafana | |
container_name: grafana | |
networks: | |
- nwpuapi-network | |
ports: | |
- "3000:3000" | |
volumes: | |
- /home/wlp/apisixFile/grafana.ini:/etc/grafana/grafana.ini | |
restart: always | |
networks: | |
nwpuapi-network: | |
driver: bridge |
curl http://10.60.32.253:9180/nwpuapi/admin/protos/1 -X PUT -d '
{
"content" : "'"$(base64 -w0 /proto.pb)"'"
}'
docker buildx build \
--platform linux/arm64 \
--build-arg HTTP_PROXY=http://172.17.0.1:7890 \
--build-arg HTTPS_PROXY=http://172.17.0.1:7890 \
-t nwpuapi-arm:latest \
--load .
docker buildx build --platform linux/arm64 \
--build-arg HTTP_PROXY=http://172.17.0.1:7890 \
--build-arg HTTPS_PROXY=http://172.17.0.1:7890 \
-t nwpuapi-arm:arm64 \
--load \
--cache-from type=local,src=/tmp/buildx-cache \
--cache-to type=local,dest=/tmp/buildx-cache .
docker buildx build --platform linux/arm64 -t nwpuapi-arm:arm64 --load .
COPY /usr/bin/qemu-aarch64-static /usr/bin
RUN [ "cross-build-start" ]
export http_proxy="http://192.168.1.101:7890"
export https_proxy="http://192.168.1.101:7890"
export ALL_PROXY="socks5://192.168.1.101:7890"
export no_proxy="localhost,127.0.0.1"
# 测试服务:
docker run -d --name koa-v -p 3006:3006 koa-v-arm64:latest
docker run -d --name springtest -p 10012:10012 -v D:\Idea\nacos\nacos-spring-boot-project\nacos-spring-boot-samples\nacos-discovery-sample/application.properties:/app/config/application.properties -e SPRING_CONFIG_LOCATION=file:/app/config/application.properties spring-service-arm64:1.0.0
docker run -d --name springtest -p 10012:10012 -v D:/Idea/nacos/nacos-spring-boot-project/nacos-spring-boot-samples/nacos-discovery-sample/application.properties:/app/application.properties spring-service-arm64:1.0.0




