1:创建目录

mkdir composetest
cd composetest


2:上传springboot项目test.jar


3:创建Dockerfile(简记,Dockerfile文件名大小写一定要一致,入过坑,浪费了两个小时。)

FROM openjdk:8-jdk-alpine
WORKDIR /home
MAINTAINER mahui
ADD test.jar /home
RUN chmod +x /home/test.jar
CMD nohup java -jar test.jar > test.log 2>&1 &

执行build生成镜像

docker build -t test .

4:创建docker-compose.yml
docker-compose.yml模板文件定义一组容器到project,默认路径是当前目录下的docker-compose.yml,可以使用.yml或.yaml作为文件扩展名。包括:version、services、networks 三部分
版本分别为Version 1,Version 2,Version 3,Version 1以后会被弃用。

version: "3"
services:
  store1:
    build: .
    ports:
      - "1103:1101"
      - "2224:2223"
    image: "test"
    networks:
      - dev
networks:
  dev:
    driver: bridge
  pro:
    driver: bridge   

 
    
5:启动应用

docker-compose up -d


发现竞然无法访问到nacos,外网可访问到test.jar

到官方查看network 使用文档
1:version 1不支持网络设置
2:Compose在项目(project)创建成功时,会创建一个单独的虚拟内网, 所有的容器将共享内网,network名叫:项目名_default
查看docker network
docker network ls

NETWORK ID          NAME                  DRIVER              SCOPE
737de2e31354        bridge                bridge              local
90a0f47cc3f8        composetest_default   bridge              local
00735a1a5199        host                  host                local
a1cf3fcdd831        none                  null                local
9398be141862        standalong_net        bridge              local


在docker compose2.1版本以后,默认network为attachable属性(覆盖所有network),3以上的版本attachable可设置为false,composetest_default为新建的newwork.

使用现有的network配置

version: "3"
services:
  store1:
    build: .
    ports:
      - "1103:1101"    
      - "2224:2223"      
    network_mode: host
    image: "acf003b32780"

再次启动应用
docker-compose up    

报错出现
=============================
ERROR: for c530b4800e8a_composetest_store1_1  "host" network_mode is incompatible with port_bindings
ERROR: for store1  "host" network_mode is incompatible with port_bindings
Traceback (most recent call last):
  File "docker-compose", line 3, in <module>
  File "compose/cli/main.py", line 80, in main
  File "compose/cli/main.py", line 192, in perform_command
  File "compose/metrics/decorator.py", line 18, in wrapper
  File "compose/cli/main.py", line 1165, in up
  File "compose/cli/main.py", line 1161, in up
  File "compose/project.py", line 708, in up
  File "compose/parallel.py", line 106, in parallel_execute
  File "compose/parallel.py", line 204, in producer
  File "compose/project.py", line 694, in do
  File "compose/service.py", line 580, in execute_convergence_plan
  File "compose/service.py", line 502, in _execute_convergence_recreate
  File "compose/parallel.py", line 106, in parallel_execute
  File "compose/parallel.py", line 204, in producer
  File "compose/service.py", line 495, in recreate
  File "compose/service.py", line 614, in recreate_container
  File "compose/service.py", line 333, in create_container
  File "compose/service.py", line 937, in _get_container_create_options
  File "compose/service.py", line 1069, in _get_container_host_config
  File "docker/api/container.py", line 598, in create_host_config
  File "docker/types/containers.py", line 339, in __init__
  
错误原因: 
"host" network_mode is incompatible with port_bindings。
host:使用宿主机网络接口功能与port映射同时使用,逻辑比较容易理解,本身已经使用了本地网络,所有端口是与宿主机同步,再作端口映射是本机映射到本机,脱了裤子放屁,多此一举。
果断修改yaml文件。

version: "3"
services:
  store1:
    build: .
    network_mode: host
    image: "acf003b32780"


    
运行成功。springboot admin里正端查看到项目数据。

注:SpringBoot在获取IP设置

spring:
  cloud:
    inetutils:
      ignoredInterfaces://忽略掉一些指定名称的网络接口
        - docker0
        - test.* 
      preferredNetworks://只使用192.168开头和10.0开头的ip地址
        - 192.168
        - 10.0  
      useOnlySiteLocalInterfaces: true. //只在局域网使用

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐