运行及配置逻辑
https://docs.docker.com/compose/networking/
location ^~ /api {
proxy_pass http://godspen:7051;
}
容器内部 hosts 文件、DNS 解析文件都没有找到对应的域名解析,所以这里我猜测是通过容器名进行访问的。
于是我修改了 compose 文件,将容器名改为了 godspenx
version: '3.4'
services:
nginx:
image: nginx
volumes:
- 'static-html:/usr/share/nginx/html'
- '$PWD/nginx.conf:/etc/nginx/conf.d/default.conf'
depends_on:
- godspenx
ports:
- '8181:80'
godspenx:
image: godspen:24.02.29-1
volumes:
- 'static-html:/app/static-html'
depends_on:
- db
- redis
build: .
发现 nginx 配置也需要改 service 名字,不然 nginx 无法启动,这是为什么呢
在 Docker Compose 中,容器之间可以通过服务名称进行通信。这是因为 Docker Compose 会自动创建一个内部网络,并将所有服务的容器连接到这个网络上。这样,每个服务都可以通过其他服务的名称直接访问它们。
例如,如果您有一个名为 web 的服务和一个名为 db 的服务,那么 web 服务可以直接通过 db 这个名字来访问数据库服务。这是通过 Docker 的网络功能实现的,它允许容器之间的直接通信。
下面是一个简单的示例,展示了如何在 Docker Compose 文件中配置两个服务,并使用服务名称进行通信:
version: '3'
services:
web:
image: nginx
depends_on:
- db
db:
image: postgres
在这个例子中,web 服务依赖于 db 服务。这意味着 web 服务将在 db 服务启动后才开始启动。当 web 服务启动时,它将能够直接通过 db 这个名字来访问数据库服务。
需要注意的是,这种通信方式只能在同一个 Docker Compose 文件中定义的服务之间工作。如果需要在不同的 Docker Compose 文件或不同的 Docker 环境中的服务之间进行通信,可能需要使用额外的网络配置或使用 Docker 链接等机制。
在 Docker Compose 中,可以通过其他服务的名称直接访问它们,是因为 Docker Compose 在启动时会为每个服务创建一个独立的网络,并且在这些网络中自动配置了服务发现机制。
具体来说,当你在 Docker Compose 配置文件中定义多个服务时,Compose 会创建一个内部网络,并将所有服务都加入到这个网络中。每个服务都会被分配一个唯一的网络名称,这个名称就是你在配置文件中定义的服务名。因此,一个服务可以通过其他服务的名称在网络中直接找到并访问它们。
这种方式简化了服务之间的通信,因为开发者只需要知道服务的名称就可以进行网络调用,而不需要关心服务的实际 IP 地址或其他复杂的网络配置。
例如,假设你有一个 Web 服务和一个数据库服务,在 Docker Compose 配置文件中分别定义为 web 和 db。当你在 web 服务中需要访问数据库时,你只需要使用 db 作为目标来建立连接,Docker Compose 会自动处理网络层面的细节。
总的来说,Docker Compose 的这种设计使得在容器化应用中实现微服务架构变得更加简单和直观。
[
{
"Name": "gods-pen-docker_default",
"Id": "80ad5cbb70d1
[
{
"Name": "gods-pen-docker_default",
"Id": "80ad5cbb70d1a96397a9512d9c199d3ac6b7ad415ec0d79c406ba4314208fc8e",
"Created": "2024-03-01T05:50:07.1263402Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"66523ac266c8b86906cc83e6a5484e8268419c5ba881511807f256af3636b6d2": {
"Name": "gods-pen-docker_nginx_1",
"EndpointID": "6c3e56f08a9410e472b2a254151b15a08b0ae1dd297922defe16a86fac1f6c8b",
"MacAddress": "02:42:ac:13:00:08",
"IPv4Address": "172.19.0.8/16",
"IPv6Address": ""
},
"69bcd34e2d826edb0b71c87f7501c022837b15ea171902cc62f83a479a6889b2": {
"Name": "gods-pen-docker_godspenx_1",
"EndpointID": "534058ccda64640d1bc718ddb189d82a43ae17c8de965284bacbae507b4a434e",
"MacAddress": "02:42:ac:13:00:07",
"IPv4Address": "172.19.0.7/16",
"IPv6Address": ""
},
"6b592c76e881ec92ba8b6b1e4561d9ca61e825cc4e8f954d5f9b9287b44a04cb": {
"Name": "es2",
"EndpointID": "0ebd9eebc4f80596a0cf26ab95c6fb44eed52ca03855f7cc522b2ab2915ffeae",
"MacAddress": "02:42:ac:13:00:02",
"IPv4Address": "172.19.0.2/16",
"IPv6Address": ""
},
"6b933094df7911b56566d1e4dde9ac4ab5211b70f5f71b62dbe06c1c9c643d5c": {
"Name": "gods-pen-docker_kibana_1",
"EndpointID": "bbb9d093da85ec2a215c2c70a149b6d48eadd5f4c5b56b880497ff256648e3c4",
"MacAddress": "02:42:ac:13:00:03",
"IPv4Address": "172.19.0.3/16",
"IPv6Address": ""
},
"7d92b9e16882502473ce63808f9f9a1ea4a7f8a28240404a0594b232cf6a059f": {
"Name": "es",
"EndpointID": "c8027af37713944f733750ff833e9cacaf4cb3bba49d6d5d418e8a3142d96dae",
"MacAddress": "02:42:ac:13:00:05",
"IPv4Address": "172.19.0.5/16",
"IPv6Address": ""
},
"81e81ddd2d910d736dc7f15e55f6e1813cbb11ec833ce86a5c70f0e759853900": {
"Name": "gods-pen-docker_db_1",
"EndpointID": "f9a449882b94928a623cedbb8394de4b69bcf1787fe7a9fcbe0454d8c93b591f",
"MacAddress": "02:42:ac:13:00:06",
"IPv4Address": "172.19.0.6/16",
"IPv6Address": ""
},
"8af9c92f4d0d1046d48f35043770b6cec29e81cfba98993a03e0c8ef8ebacfdb": {
"Name": "gods-pen-docker_redis_1",
"EndpointID": "564abea6b9e368453bc689f184d786ddd24b880c85668811a1311f45dad59e18",
"MacAddress": "02:42:ac:13:00:04",
"IPv4Address": "172.19.0.4/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "default",
"com.docker.compose.project": "gods-pen-docker",
"com.docker.compose.version": "1.29.2"
}
}
]