Ansible Docker: 使用容器执行 shell 文件

Ansible Docker: Execute shell file with container

我有以下 Docker 命令:

docker run -d  --name ADMIN_SERVER_TEST1 --network=soa_net --ip=172.16.1.11 -p 7001:7001 -v /Oracle_Volumes/ENVIRONMENTS/TEST1/SOA-Volume/cheetah_domain:/u01/oracle/user_projects   --env-file $ENV_HOME/adminserver-test1.env.list --env-file $ENV_HOME/soaserver-test1.env.list -u root redreply/soa-suite:12.2.1.3 ./dockertools/createDomainAndStart.sh && docker logs -f ADMIN_SERVER_TEST1

对于此命令,我使用 Ansible 创建了以下脚本:

  - name: Create SOA container
    docker_container:
      name: "{{ name }}"
      image: "{{ image }}"
      detach: yes
      privileged: yes
      user: root
      volumes:
          - "{{ src_vol }}:{{ dest_vol }}"
      ports:
          - 7001:7001
      networks: 
        - name: soa_net
          ipv4_address: "{{ ip }}"
          env_file: 
            - "{{ env_file_1}}"
            - "{{ env_file_2}}"

但我不知道如何将这部分添加到 Ansible 脚本中:

./dockertools/createDomainAndStart.sh && docker logs -f ADMIN_SERVER_TEST1

如果你想运行你的脚本作为容器启动时在容器中执行的command,你可以使用command属性指定它,如下所示:

  - name: Create SOA container
    docker_container:
      name: "{{ name }}"
      image: "{{ image }}"
      detach: yes
      privileged: yes
      user: root
      command: ./dockertools/createDomainAndStart.sh
      volumes:
          - "{{ src_vol }}:{{ dest_vol }}"
      ports:
          - 7001:7001
      networks: 
        - name: soa_net
          ipv4_address: "{{ ip }}"
          env_file: 
            - "{{ env_file_1}}"
            - "{{ env_file_2}}"

我基本上添加了 command 属性以在容器启动时调用您的 ./dockertools/createDomainAndStart.sh 脚本。

Ansible documentationcommand 属性的描述如下:

Command to execute when the container starts. A command may be either a string or a list. Prior to version 2.4, strings were split on commas.