首页 > 解决方案 > 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

标签: azuredockerdockerfileazure-automation

解决方案


虽然我还不知道它不起作用的确切原因,但我已经取得了一些进展,我想分享一下。

我一直在通过比较在 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。

我知道这并不能回答您关于如何通过构建和运行容器而无需远程访问它来使其工作的问题。我仍在努力,如果我找到答案,我会告诉你。

祝你好运。


推荐阅读