使用ManageIQ项目在Docker Hub上提供的映像来测试在Docker容器中运行的ManageIQ。解决了在使用WSL2上的一些问题:使用systemd启动、WSL2中访问宿主机Windows代理、安装ManageIQ并且将端口映射到windows宿主机上访问。
参考资料:
[DamionGans/ubuntu-wsl2-systemd-script: script to enable systemd support on current Ubuntu WSL2 images Unsupported, no longer updated] (github.com)
WSL2 中访问宿主机 Windows 的代理 - ZingLix Blog
ManageIQ - Easy Install With Docker
Docker容器与win10访问wsl中的docker中容器_Canger_的博客-CSDN博客
SystemctlWSL2 本身是由 Windows 负责运行的,因此使用 tree 或 ps 命令时会看到根进程不是 systemd,这将导致无法启动 Linux 系统服务的守护进程(deamon)。当我们执行 systemctl 命令的时候,会显示出我们的 init system (PID 1) 并非 systemd,而是微软提供的 /init。
$ systemctl System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down $ ps u -q 1 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 908 592 ? Sl 11:27 0:00 /init
这里使用一个脚本解决问题,这个脚本用于在Windows应用商店中的当前Ubuntu WSL2映像上启用systemd支持的脚本。这个脚本不受支持,将不再被维护。
需要安装git:
sudo apt install git
git并运行脚本:
git clone https://github.com/DamionGans/ubuntu-wsl2-systemd-script.git cd ubuntu-wsl2-systemd-script/ bash ubuntu-wsl2-systemd-script.sh # Enter your password and wait until the script has finished
测试一下,可以发现PID1进程从init变成了systemd:
$ ps u -q 1 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 26724 12236 ? Ss 01:08 0:00 /lib/systemd/systemd --unit=basic.targetWSL2 中访问宿主机Windows 的代理
这部分内容是转载WSL2 中访问宿主机 Windows 的代理 - ZingLix Blog
获得宿主机ip:
cat /etc/resolv.conf | grep nameserver | awk '{ print }'
获得WSL2自己的ip:
hostname -I | awk '{print }'
在~下新建一个文件proxy.sh,这段代码首先分别获得宿主机的ip地址和WSL2的ip地址,并且手动将外部代理的端口写入常量port,将宿主机ip和代理端口组合成常量PROXY_HTTP,分别写set_proxy()、unset_proxy()和test_setting()三个函数,根据传入的参数判断执行:
#!/bin/sh hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }') wslip=$(hostname -I | awk '{print $1}') port=PROXY_HTTP="http://${hostip}:${port}" set_proxy(){ export http_proxy="${PROXY_HTTP}" export HTTP_PROXY="${PROXY_HTTP}" export https_proxy="${PROXY_HTTP}" export HTTPS_proxy="${PROXY_HTTP}" export ALL_PROXY="${PROXY_SOCKS5}" export all_proxy=${PROXY_SOCKS5} } unset_proxy(){ unset http_proxy unset HTTP_PROXY unset https_proxy unset HTTPS_PROXY unset ALL_PROXY unset all_proxy } test_setting(){ echo "Host ip:" ${hostip} echo "WSL ip:" ${wslip} echo "Current proxy:" $https_proxy } if [ "$1" = "set" ] then set_proxy elif [ "$1" = "unset" ] then unset_proxy elif [ "$1" = "test" ] then test_setting else echo "Unsupported arguments." fi
第 4 行
在~/.bashrc中加上下面两句话,并将里面的路径修改成放这个脚本的路径:
alias proxy="source /path/to/proxy.sh" . /path/to/proxy.sh set
我的目录为/home/shark:
shark@LAPTOP-NJ5APBFE:~$ pwd /home/shark
所以加的是:
alias proxy="source /home/shark/proxy.sh" . /home/shark/proxy.sh set
这样就可以在任何路径使用三个命令proxy set,proxy unset,proxy test来进行proxy的设置、删除与测试,例如:
$ proxy test Host ip: 172.22.80.1 WSL ip: 172.22.80.169 Current proxy: http://172.22.80.1:7890使用Docker运行ManageIQ
使用ManageIQ项目在Docker Hub上提供的映像来测试在Docker容器中运行的ManageIQ。
ManageIQ - Easy Install With Docker
启动docker:
sudo systemctl start docker
Step 1:官方提供的镜像:
docker pull manageiq/manageiq:lasker-1
这里提供的镜像是有问题的,因为在Docker Hub上找不到这个镜像,所以替换为
docker pull manageiq/manageiq:latest-lasker
Step 2:运行容器:
docker run -d -p 8443:443 manageiq/manageiq:latest-lasker
看一下是否正常跑了起来:
$ docker ps ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c564bf9ffae8 manageiq/manageiq:latest-lasker "/usr/bin/dumb-init …" 4 seconds ago Up 3 seconds 3000/tcp, 0.0.0.0:8443->443/tcp, :::8443->443/tcp eager_joliot
但是这个时候只能从docker内部访问,无法在windows宿主机上访问,所以需要进行端口映射。
Docker端口映射到宿主机通过docker container ls当前运行的容器以及端口映射情况:
$ docker container ls ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c564bf9ffae8 manageiq/manageiq:latest-lasker "/usr/bin/dumb-init …" 50 minutes ago Up 50 minutes 3000/tcp, 0.0.0.0:8443->443/tcp, :::8443->443/tcp eager_joliot
此时只能在WSL2中访问容器的8443端口,可以通过 ifconfig 查看Docker的ip,但是直接在win10的浏览器上访问还是不行,因此需要建立映射。以管理员身份打开powershell:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8443 connectaddress=connectport=
例如:上面我是用WSL2的ubuntu中的8443端口映射到了容器的443端口,所以我这边的connectport要填8443,再利用上面配置的proxy查看一下WSL2的ip地址:
$ proxy test Host ip: 172.22.80.1 WSL ip: 172.22.80.169 Current proxy: http://172.22.80.1:7890
查到WSL ip: 172.22.80.169:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8443 connectaddress=172.22.80.169 connectport=8443
建立映射后可以查看:
netsh interface portproxy show all 侦听 ipv4: 连接到 ipv4: 地址 端口 地址 端口 --------------- ---------- --------------- ---------- 0.0.0.0 8443 172.22.80.169 8443
现在就可以用本机8443端口访问到容器的443端口(WSL2的8443端口)了。
如果使用host模式暴露端口,则:
docker run -d -p 8443:443 --network host manageiq/manageiq:latest-lasker
只需要建立443到宿主机的映射:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8443 connectaddress=172.22.80.169 connectport=443
查看映射:
netsh interface portproxy show all 侦听 ipv4: 连接到 ipv4: 地址 端口 地址 端口 --------------- ---------- --------------- ---------- 0.0.0.0 8443 172.22.80.169 443
如果需要删除,可以使用delete命令:
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=8443
访问一下ManageIQ,注意要使用https://:
默认的账号密码:
- Login: adminPassword: smartvm
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)