azure - Azure 混合工作器 Docker
问题描述
我目前正在尝试使用以下提供的说明对 Azure Hybrid Worker 进行 docker 化:
https://docs.microsoft.com/en-us/azure/automation/automation-linux-hrw-install
我成功了 90%,但是当我尝试使用 onboarding.py 运行最后一步时,在文档指定的位置找不到脚本。基本上在容器中的任何地方都找不到该文件。任何帮助都会很棒。
FROM ubuntu:14.04
RUN apt-get update && \
apt-get -y install sudo
ENV user docker
RUN useradd -m -d /home/${user} ${user} && \
chown -R ${user} /home/${user} && \
adduser ${user} sudo && \
echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
USER ${user}
#WORKDIR /home/${user}
RUN sudo apt-get -y install apt-utils && \
sudo apt-get -y install openssl && \
sudo apt-get -y install curl && \
sudo apt-get -y install wget && \
sudo apt-get -y install cron && \
sudo apt-get -y install net-tools && \
sudo apt-get -y install auditd && \
sudo apt-get -y install python-ctypeslib
RUN sudo wget https://raw.githubusercontent.com/Microsoft/OMS-Agent-for-Linux/master/installer/scripts/onboard_agent.sh && \
sudo sh onboard_agent.sh -w <my-workplace-id> -s <my-workspace-key>
RUN sudo python /opt/microsoft/omsconfig/modules/nxOMSAutomationWorker/DSCResources/MSFT_nxOMSAutomationWorkerResource/automationworker/scripts/onboarding.py --register <arguments-removed-for-stackoverflow-post>
EXPOSE 443
解决方案
虽然我还不知道它不起作用的确切原因,但我已经取得了一些进展,我想分享一下。
我一直在通过比较在 VM 上运行的 centos 和 centos docker 容器之间的差异来试验这个问题。虽然我无法查明缺少的确切内容,但我能够让onboarding.py
文件显示在 centos docker 容器上。
首先,我所做的是创建一个文件,其中包含安装在最小 centos VM 上的软件包列表。在我的 docker 文件中,我运行了这个文件并安装了每个包。我计划削减文件,看看有什么必要让这个工作。
第二件事是您必须拥有systemd
,默认情况下未安装。这是我在测试时的 docker 镜像:
FROM centos:7
RUN yum -y update && yum install -y sudo
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
ENV user docker
RUN useradd -m -d /home/${user} ${user}
RUN chown -R ${user} /home/${user}
RUN echo "docker ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
USER ${user}
WORKDIR /home/${user}
COPY ./install_packages .
RUN sudo yum install -y $(cat ./install_packages)
sudo wget https://raw.githubusercontent.com/Microsoft/OMS-Agent-for-Linux/master/installer/scripts/onboard_agent.sh
CMD ["/usr/sbin/init"]
之后,我使用docker run
在本地运行容器并启动 systemd:
docker run -v /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro -d container_id
然后exec
我进入我的容器并运行板载脚本:
sudo sh onboard_agent.sh -w 'xxx' -s 'xxx'
完成后,您有时需要等待大约 5 分钟才能出现丢失的文件夹。要尽快触发这种情况,您需要运行以下命令:
/opt/microsoft/omsagent/bin/service_control restart {OMS_WORKSTATION_ID}
我的理解是这个命令会重启 OMS 代理,它需要 systemctl。
我知道这并不能回答您关于如何通过构建和运行容器而无需远程访问它来使其工作的问题。我仍在努力,如果我找到答案,我会告诉你。
祝你好运。
推荐阅读
- python - 将列表加入 Pandas 框架 - 我是否保留了订单?
- c++ - 在 C++ 中使用命名空间指令的正确方法
- laravel - 无法更新某个字段 Laravel Elequent
- javascript - 如何为我的案例使用 Express Error 中间件?
- angularjs - 找不到名称错误 - 如何以角度从 node_modules/@types 导入定义文件?
- python - 为什么应该由 matplotlib Axis 包含的 Line2D 对象显示为空?
- php - Laravel 身份验证。如何将表“用户”更改为表“员工”?
- android - 在滚动协调器布局上显示和隐藏布局
- c - 程序正在打印带有附加元素和垃圾值的数组
- scala - 转换数组