portainer下安装时自定义IP地址

安装一个新的桥接网络

docker network create --subnet 172.18.0.0/16 --gateway 172.18.0.1 npm_app_net

一个X-UI的安装示例,包括自定义IP

version: "3"

services:
  app:
    image: enwaiax/x-ui:latest
    ports:
      - 8801:54321 # 管理面板端口映射
      - 8100-8105:8100-8105/tcp
      - 8100-8105:8100-8105/udp
    tmpfs:
      - /tmp
      - /run
      - /run/lock
    environment:
      TZ: 'Asia/Shanghai'
    volumes:
      - /sys/fs/cgroup:/sys/fs/cgroup:ro
      - /root/data/docker_data/x-ui/x-ui-data/:/etc/x-ui
    restart: unless-stopped
    networks:
      npm_app_net:
        ipv4_address: 172.18.0.3
        
networks:
  npm_app_net:
    external: true

安装NPM

version: "3"
services:
  npm:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '8801:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP

    # Uncomment the next line if you uncomment anything in the section
    # environment:
      # Uncomment this if you want to change the location of 
      # the SQLite DB file within the container
      # DB_SQLITE_FILE: "/data/database.sqlite"

      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
    environment:
      DISABLE_IPV6: 'true'

    volumes:
      - /home/data/docker_data/npm/data:/data
      - /home/data/docker_data/npm/letsencrypt:/etc/letsencrypt
    networks:
      npm_app_net:
        ipv4_address: 172.18.0.2
        
networks:
  npm_app_net:
    external: true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要实现一个自定义IP地址输入框,可以借助WPF的自定义控件来实现。以下是一个简单的实现步骤: 1. 创建一个新的WPF自定义控件,并命名为"IPAddressInputBox"。 2. 在控件的XAML文件中,添加四个文本框用于输入IP地址的四个部分,以及用于分隔符的文本标签。 3. 在控件的代码文件中,添加四个依赖属性,分别对应IP地址的四个部分,以及一个绑定整个IP地址的依赖属性。 4. 在控件的代码文件中,添加一个IP地址验证方法,用于检查输入的IP地址是否合法。 5. 在控件的代码文件中,添加一个值改变事件,当任何一个IP地址部分的值发生改变,验证IP地址的合法性,并更新绑定整个IP地址的依赖属性。 下面是一份示例代码,实现了一个简单的自定义IP地址输入框: IPAddressInputBox.xaml: ```xaml <UserControl x:Class="WpfCustomControls.IPAddressInputBox" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid> <TextBox x:Name="txtBox1" Width="40" MaxLength="3" TextChanged="txtBox_TextChanged"/> <TextBlock Text="." Margin="5,0,5,0"/> <TextBox x:Name="txtBox2" Width="40" MaxLength="3" TextChanged="txtBox_TextChanged"/> <TextBlock Text="." Margin="5,0,5,0"/> <TextBox x:Name="txtBox3" Width="40" MaxLength="3" TextChanged="txtBox_TextChanged"/> <TextBlock Text="." Margin="5,0,5,0"/> <TextBox x:Name="txtBox4" Width="40" MaxLength="3" TextChanged="txtBox_TextChanged"/> </Grid> </UserControl> ``` IPAddressInputBox.xaml.cs: ```csharp using System.Windows; using System.Windows.Controls; namespace WpfCustomControls { public partial class IPAddressInputBox : UserControl { public static readonly DependencyProperty IP1Property = DependencyProperty.Register("IP1", typeof(string), typeof(IPAddressInputBox), new PropertyMetadata("", OnIPChanged)); public static readonly DependencyProperty IP2Property = DependencyProperty.Register("IP2", typeof(string), typeof(IPAddressInputBox), new PropertyMetadata("", OnIPChanged)); public static readonly DependencyProperty IP3Property = DependencyProperty.Register("IP3", typeof(string), typeof(IPAddressInputBox), new PropertyMetadata("", OnIPChanged)); public static readonly DependencyProperty IP4Property = DependencyProperty.Register("IP4", typeof(string), typeof(IPAddressInputBox), new PropertyMetadata("", OnIPChanged)); public static readonly DependencyProperty IPAddressProperty = DependencyProperty.Register("IPAddress", typeof(string), typeof(IPAddressInputBox), new PropertyMetadata("", OnIPAddressChanged)); public string IP1 { get { return (string)GetValue(IP1Property); } set { SetValue(IP1Property, value); } } public string IP2 { get { return (string)GetValue(IP2Property); } set { SetValue(IP2Property, value); } } public string IP3 { get { return (string)GetValue(IP3Property); } set { SetValue(IP3Property, value); } } public string IP4 { get { return (string)GetValue(IP4Property); } set { SetValue(IP4Property, value); } } public string IPAddress { get { return (string)GetValue(IPAddressProperty); } set { SetValue(IPAddressProperty, value); } } public IPAddressInputBox() { InitializeComponent(); } private static void OnIPChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var inputBox = (IPAddressInputBox)d; inputBox.IPAddress = string.Format("{0}.{1}.{2}.{3}", inputBox.IP1, inputBox.IP2, inputBox.IP3, inputBox.IP4); } private static void OnIPAddressChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var inputBox = (IPAddressInputBox)d; var parts = inputBox.IPAddress.Split('.'); if (parts.Length == 4) { inputBox.IP1 = parts[0]; inputBox.IP2 = parts[1]; inputBox.IP3 = parts[2]; inputBox.IP4 = parts[3]; } } private void txtBox_TextChanged(object sender, TextChangedEventArgs e) { var tb = sender as TextBox; if (tb != null) { var value = tb.Text; if (string.IsNullOrEmpty(value) || int.TryParse(value, out int result) && result >= 0 && result <= 255) { // Value is valid tb.Foreground = SystemColors.WindowTextBrush; OnIPChanged(this, null); } else { // Value is invalid tb.Foreground = Brushes.Red; } } } } } ``` 使用自定义控件,可以在XAML中引用,并绑定其依赖属性: ```xaml <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:custom="clr-namespace:WpfCustomControls;assembly=WpfCustomControls" Title="MainWindow" Height="450" Width="800"> <Grid> <custom:IPAddressInputBox IPAddress="{Binding MyIPAddress}" /> </Grid> </Window> ``` 其中,"MyIPAddress"是一个ViewModel中的属性,用于绑定整个IP地址的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值