DataMoney.net

Docker-compose-docker-增加固定IP增加域名映射docker_compose配置

andy发表:

#>1先来一份配置文件
networks: frontend: driver: bridge ipam: config: - subnet: 172.18.0.0/24 backend: driver: bridge ipam: config: - subnet: 172.19.0.0/24 services: code: image: mysql:last volumes: - /var/code:/var/code:cached extra_hosts: - "s.com:172.19.0.1" ports: - "2222:22" - "6379:6379" - "80:80" hostname: myname tty: true environment: - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${MYSQL_USER} - TZ=${TIMEZONE} networks: frontend: ipv4_address: 172.18.0.1 backend: ipv4_address: 172.19.0.1
#>2上述配置详细说明--建议看看官方手册 networks:docker的网络配置 frontend:建个组,给组起个名字,一组管理很多个,方便嘛. driver: bridge这个组的类型-当前是桥接 ipam:网卡/网关配置 config: - subnet: 172.18.0.0/24网关和网段. backend 同理略. services:容器服务配置 code:容器名code.起名叫code在容器间通信时名字是有唯一值作用的 extra_hosts:// 在这里加的域名,相当于容器内/etc/hosts.增加localhost域名。兩者不同在于重启后依然生效.!!!特別是你访问a域名,ad在程序内运行时访问B网站.此时同端口同地址同网站已发生资源抢夺,整个程序死掉. 有人说:我在访问一个页面,程序也是同时调用nginx,php.mysql,redis为啥没事.为啥?! 勉强回答,不同的服务和端口,相互不抢占彼此通道. - "s.com:172.19.0.1"//举例1,前面是域名,你还是要在本地宿主机解析localhost的.Ip是你的容器网关ip, hostname://有了他,你主机名不再是串字符乱码而是名字了,方便命令行无他. myname tty: true//想进容器的命令行就得 environment://这个也很有用, 比如要输入的账户密码,时区语言等. - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${MYSQL_USER} - TZ=${TIMEZONE} networks://这里我们给当前容器分配一个固定Ip,重启后也不会变.数据库连接超有用. frontend: ipv4_address: 172.18.0.1 backend: ipv4_address: 172.19.0.1