wuqingvika 发表于 2023-7-18 14:14

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


天王盖地虎a 发表于 2023-7-18 14:20

可以run的时候加--network=host参数,让容器和宿主机共享网络

wuqingvika 发表于 2023-7-18 14:32

天王盖地虎a 发表于 2023-7-18 14:20
可以run的时候加--network=host参数,让容器和宿主机共享网络

可用host 端口不是不固定了吗

loveqianool 发表于 2023-7-18 14:34

端口2:8383

为啥 nginx 要填 8686 呢?

sgbyg 发表于 2023-7-18 14:34

# 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

wuqingvika 发表于 2023-7-18 14:39

loveqianool 发表于 2023-7-18 14:34
端口2:8383

为啥 nginx 要填 8686 呢?

8686是端口2 真实是8686:8383

jidesheng6 发表于 2023-7-18 14:39

你应该换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的容器一定要最后再启动


loveqianool 发表于 2023-7-18 14:41

wuqingvika 发表于 2023-7-18 14:39
8686是端口2 真实是8686:8383

内部互访 填内部端口

wuqingvika 发表于 2023-7-18 14:48

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

wuqingvika 发表于 2023-7-18 14:51

jidesheng6 发表于 2023-7-18 14:39
你应该换dockercompose来配置network,然后用容器名称来访问

```yaml


我们dockercompose在服务器A上弄好了镜像上传到私有库的 再去另一台服务器B 拉取私有仓库的镜像 所以在服务器B上我直接用的docker run 分开执行的也可以用同一个dockercompose文件吗
页: [1] 2 3
查看完整版本: docker容器怎么实现相互访问