docker容器怎么实现相互访问
本帖最后由 wuqingvika 于 2023-7-18 15:08 编辑大佬们 ,帮我看看哪里不对
场景:以前docker容器间用的ip访问的 但后来需要改成容器名调用,所以我使用 docker network create创建了 qwu-ywbdwebnetwork我的前端 应用
docker run -dit -p 端口1:80 --name ywbd-vue --network qwu-ywbdwebnetwork私有仓库地址:端口/ywbdprod/ywbd-vue:v1.3_wq
我的后端 应用启动
docker run -dit-p 端口2:8383 --name ywbd-admin --network qwu-ywbdwebnetwork私有仓库地址:端口/ywbdprod/ywbd-admin:v1.3_wq
我的前端nginx
配置
求助哪里不对呢 改成端口是可以的 但是直接这样nginx报【502】 然后直接在宿主机用Ping ywbd-admin也不行 在容器里使用ping和wget没有这个命令。。
version: '3'
services:
ywbd-admin:
image: registry.local:5000/ywbdprod/ywbd-admin:${YWBDWEB_VERSION}
container_name: ywbd-admin
build:
context: ./ywbdadmin# 构建上下文为 Dockerfile 所在的目录
# context: ./data01/wqtest/ywbdwebzsuijardocker/appzs
dockerfile: Dockerfile
ports:
- "8686:8383"
environment:
- TZ=Asia/Shanghai
volumes:
- "/data01/wqtest/ywbdwebzsuijardocker/appzs:/app"
- "/home/qwu/ywbdweblog/test:/logs"
ywbd-vue:
image: registry.local:5000/ywbdprod/ywbd-vue:${YWBDWEB_VERSION}
container_name: ywbd-vue
build:
context: ./ywbdvue
dockerfile: Dockerfile
ports:
- "60086:80"
environment:
- TZ=Asia/Shanghai
networks:
default:
external:
name: ywbd-admin
可以run的时候加--network=host参数,让容器和宿主机共享网络 天王盖地虎a 发表于 2023-7-18 14:20
可以run的时候加--network=host参数,让容器和宿主机共享网络
可用host 端口不是不固定了吗 端口2:8383
为啥 nginx 要填 8686 呢? # 1.启动ywbd-vue开放两个端口
docker run -dit \
-p 端口1:80 \
-p 端口2:8383 \
--name ywbd-vue 私有仓库地址:端口/ywbdprod/ywbd-vue:v1.3_wq
# 2.启动ywbd-admin与ywbd-vue共享端口
docker run -dit \
--net container:ywbd-vue \
--name ywbd-admin 私有仓库地址:端口/ywbdprod/ywbd-admin:v1.3_wq loveqianool 发表于 2023-7-18 14:34
端口2:8383
为啥 nginx 要填 8686 呢?
8686是端口2 真实是8686:8383 你应该换dockercompose来配置network,然后用容器名称来访问
```yaml
version: "3.5" #版本号
services: #定义服务
wscp-nginx: #定义第一个nginx服务名称
image: wscp-nginx #定义镜像
networks: #设置网络
- wscp-network #加入wscp-network进行互联
ports:#映射容器内部端口
- "8080:80"
container_name: wscp-nginx#定义容器名称
depends_on:#容器需要在wscp-back启动后再进行启动
- wscp-back
wscp-redis:#redis服务
image: wscp-redis#使用redis镜像
networks:#加入wscp-network网络
- wscp-network
container_name: wscp-redis#设置容器名称
wscp-back:#主要的java程序服务
image: wscp-back#本地java程序镜像
container_name: wscp-back#容器名称
volumes:#挂载容器目录到本地目录,左边本地;右边容器
- "./download_temp:/wscp_project/back_end/download_temp"
- "./upload_formal:/wscp_project/back_end/upload_formal"
networks:#加入wscp-network网络
- wscp-network
networks:#添加一个新网络
wscp-network:#网络名称为wscp-network
driver: bridge#使用桥接方式
```
上面这个例子,全局networks加了一个wscp-network,然后在其他容器上面加入wscp-network
这样三个容器会在各自的hosts文件中自动添加解析,比如wscp-back就会添加wascp-back 10.2.1.1
你不放心的话可以直接进容器内部ping某个容器名称检验就知道了,但是一定要注意,nginx的容器一定要最后再启动
wuqingvika 发表于 2023-7-18 14:39
8686是端口2 真实是8686:8383
内部互访 填内部端口 sgbyg 发表于 2023-7-18 14:34
# 1.启动ywbd-vue开放两个端口
docker run -dit \
-p 端口1:80 \
也不行么 前端 的容器起来会报2023/07/18 06:46:48 1#1: host not found in upstream "ywbd-admin" in /etc/nginx/nginx.conf:32
nginx: host not found in upstream "ywbd-admin" in /etc/nginx/nginx.conf:32
jidesheng6 发表于 2023-7-18 14:39
你应该换dockercompose来配置network,然后用容器名称来访问
```yaml
我们dockercompose在服务器A上弄好了镜像上传到私有库的 再去另一台服务器B 拉取私有仓库的镜像 所以在服务器B上我直接用的docker run 分开执行的也可以用同一个dockercompose文件吗