我成功构建了一个docker容器。我正在尝试运行它,但容器在启动时死亡。如何检查问题出在哪里?在docker events我可以看到以下日志:
2019-07-21T16:34:28.239785600+02:00 container create 32300daaf2e67ed935af47e9c33914ff67c678bf71b36aac1a0dcee93146da45 (image=jacob/api, name=quirky_feistel)
2019-07-21T16:34:28.444621700+02:00 network connect d6234d64d738131d14f8c951fe8067fad7bd4a0ff8a81f1b452d1a107648f95c (container=32300daaf2e67ed935af47e9c33914ff67c678bf71b36aac1a0dcee93146da45, name=bridge, type=bridge)
2019-07-21T16:34:29.070197400+02:00 container start 32300daaf2e67ed935af47e9c33914ff67c678bf71b36aac1a0dcee93146da45 (image=jacob/api, name=quirky_feistel)
2019-07-21T16:34:29.389522500+02:00 container die 32300daaf2e67ed935af47e9c33914ff67c678bf71b36aac1a0dcee93146da45 (exitCode=1, image=jacob/api, name=quirky_feistel)
2019-07-21T16:34:29.807771700+02:00 network disconnect d6234d64d738131d14f8c951fe8067fad7bd4a0ff8a81f1b452d1a107648f95c (container=32300daaf2e67ed935af47e9c33914ff67c678bf71b36aac1a0dcee93146da45, name=bridge, type=bridge)
Run Code Online (Sandbox Code Playgroud)
我在本地运行 docker 并且启动命令是 docker run -p 49160:8080 -d jacob/api
示例剧本 -
---
- hosts: localhost
vars:
lesson:
name: Physics
students:
- Bob
- Joe
tasks:
- name: Display student names
debug:
msg: '{{ item }}'
loop: "{{ lesson.students }}"
when: item | default("")
Run Code Online (Sandbox Code Playgroud)
上面的剧本可以很好地输出学生姓名。
但是,如果输入发生更改(如下所示)以致未定义学生姓名,则会发生错误。如果根据下面的输入未定义列表,是否有一种简单的方法可以让剧本跳过此任务?我意识到如果输入指定Students: [],那么它会起作用,但由于此输入来自简单用户,因此他们不会知道这一点。非常感谢!
vars:
lesson:
name: Physics
students:
Run Code Online (Sandbox Code Playgroud)
错误:致命:[localhost]:失败!=> msg: '无效数据传递给''循环'',它需要一个列表,改为: 。提示:如果您传递了仅包含一个元素的列表/字典,请尝试将 Wantlist=True 添加到查找调用中或使用 q/query 而不是查找。
更新 - 我已经尝试了以下变体,但仍然遇到相同的错误 -
---
- hosts: localhost
vars:
lesson:
name: Physics
students:
tasks:
- name: Display student names variation 1
debug:
msg: '{{ item }}'
loop: "{{ …Run Code Online (Sandbox Code Playgroud) 尽管我检查过以前的类似问题,但似乎没有一个适用于我。只要我们的基础设施的其余部分不会更新,我们就使用 Ansible 版本 2.9。我有这个列表,在它下面我需要过滤两个字符串。
kvm_list:
- abcdefabcfgh.domain.example
- deffghabc.domain.example
- abcblabla.domain.example
- kabcxyz.domain.example
- kesanu.domain.example
- kesbapo.domain.example
- kextoet.domain.example
- kptfkom.domain.example
- kgitblabla.domain.example
- kgitblubblub.domain.example
Run Code Online (Sandbox Code Playgroud)
- name: "get them devtools"
hosts: localhost
ignore_errors: True
tasks:
- set_fact:
devtools: "{{ kvm_list | string | regex_search('kgit.*|kes.*', multiline=True)}}"
- debug: var=devtools
Run Code Online (Sandbox Code Playgroud)
当尝试上面的方法时,我得到了下面的结果:
TASK [debug] **************************************************************************************************************************
ok: [localhost] => {
"msg":"kesanu.domain.example','kesbapo.domain.example','kextoet.domain.example','kptfkom.domain.example','kgitblabla.domain.example','kgitblubblub.domain.example]"
}
Run Code Online (Sandbox Code Playgroud)
Kextoet并且kptfkom不应该被包括在内。
当纯粹在正则表达式( https://regex101.com/ )上测试它时,它可以工作,而在 ansible 中测试它时,它不起作用。
使用时regex_findall,我得到相同的结果。
当对一个字符串进行正则表达式搜索时,它是正确的。
如果有人可以提出一些提示或指出显而易见的事情,我将不胜感激。
我正在尝试在每个目录中创建多个目录(具有不同的名称)和文件。
我有一个名为目录的变量,其中包含目录和文件名,如下所示:
directories:
- directory: dir1
static_files:
files:
- file1
- file2
- directory: dir2
static_files:
files:
- file1
- file2
Run Code Online (Sandbox Code Playgroud)
这是我能够使用 with_subelments 提出的解决方法,但有两个任务似乎有效。然而,我相信必须有一个只有一项任务的解决方案来实现这一目标。
- name: Creates directories
file:
path: "/tmp/{{ item[0].directory }}"
state: directory
recurse: yes
mode: 0755
owner: user
group: group
become: true
with_subelements:
- "{{ directories }}"
- static_files.files
- name: Creates files
file:
path: "/tmp/{{ item[0].directory }}/{{ item[1] }}"
state: touch
mode: 0644
owner: user
group: group
become: true
with_subelements:
- "{{ directories }}"
- static_files.files …Run Code Online (Sandbox Code Playgroud) 我有一个功能性的 gitlab 管道来将代码发布到 AWS 服务器。它突然开始失败,没有任何原因。我收到以下错误。有人可以给我一些线索吗?我无法发布整个代码,因为它很长。
** [WARNING]: - geerlingguy.docker was NOT installed successfully: missing
required 'current_version' from server response
(https://galaxy.ansible.com/api/)
ERROR! - you can use --ignore-errors to skip failed roles and finish processing the list.
ERROR: Job failed: exit code 1**
Run Code Online (Sandbox Code Playgroud) 我想根据操作系统版本设置补丁。在 Ansible 版本 2.8 中提出了这个剧本。但它The task includes an option with an undefined variable.在调试行中给出错误消息。
---
- hosts: all
gather_facts: yes
vars:
patch_name_8: 'centos8-updates'
patch_name_7: 'centos7-updates'
tasks:
- name: Set fact for CentOS 7
set_fact:
install_patch_name: "{{ patch_name_7 }}"
when: ansible_distribution_major_version == 7
- name: Set fact for CentOS 8
set_fact:
install_patch_name: "{{ patch_name_8 }}"
when: ansible_distribution_major_version == 8
- name: patch name display
debug:
msg: "install {{ install_patch_name }}"
Run Code Online (Sandbox Code Playgroud)
如何install_patch_name根据操作系统版本设置变量值?
这是错误消息:
TASK [patch name display] ************************************************************************************************************
fatal: …Run Code Online (Sandbox Code Playgroud) 我试图hosts在执行时从本地计算机中删除生成的 Ansible 库存文件terraform destroy。
当我运行时,terraform apply我用来provisioner "local-exec"创建hosts文件,稍后由部署期间调用的 ansible playbook 使用。
provisioner "local-exec" {
command = "echo master ansible_host=${element((aws_instance.kubeadm-node.*.public_ip),0)} >> hosts"
}
Run Code Online (Sandbox Code Playgroud)
hosts当我删除所有资源时是否可以确保文件被删除terraform destroy?hosts执行时删除文件的最简单方法是什么terraform destroy?
感谢您的帮助,如果我的解释不够清楚,请告诉我。
ansible ×5
amazon-ec2 ×1
ansible-2.x ×1
delete-file ×1
docker ×1
gitlab ×1
gitlab-ci ×1
terraform ×1