gpt4 book ai didi

docker - 在Ansible中全局设置TMPDIR以将Docker与/tmp上的noexec标志一起使用

转载 作者:行者123 更新时间:2023-12-02 19:21:45 40 4
gpt4 key购买 nike

出于安全原因,我们将/tmp挂载了noexec-flag。由于docker需要exec-flag,因此运行任何docker-compose命令(如docker-compose --version)都会导致以下错误:

docker-compose: error while loading shared libraries: libz.so.1: failed to map segment from shared object

这可以在CLI by setting the TMPDIR env variable to a local path like the home directory上修复。但是在Ansible中,这不起作用,因为它没有生成登录shell。我们获得了一个Ansible剧本,其中包含许多 docker-compose cli调用,但它们忽略了例如在 TMPDIR

它仅在将 /etc/environment指定为具有绝对路径的环境变量时才有效,如下所示:
- name: Check if all applications are is running
shell: |
docker-compose ps | grep Up | wc -l
changed_when: running.stdout != item.services_num
register: running
with_items:
- "{{ docker_applications }}"
environment:
TMPDIR: /home/myuser

由于这会导致许多代码更改和开销,因此我正在研究如何全局设置。 TMPDIR 应该可以解决此问题,因此我将其设置为 remote_tmp:
[defaults]
remote_tmp = /home/myuser

这不起作用,并且在Ansible 2.9、2.8或2.9 docs中找不到该指令。

最佳答案

我发现a workaround允许在剧本级别使用ansible变量指定env变量,如下所示:

- name: Setting custom TMPDIR for docker
hosts: all
environment:
TMPDIR: "{{ tmp_dir }}"
vars:
tmp_dir: /home/myuser
# Verify that it works by making a negative test with the wrong temp dir that results in libz.so.1 segment failed error
#tmp_dir: /tmp
tasks:
- name: Test tmpdir
shell: "echo $TMPDIR; docker-compose --version

指定绝对路径很重要。 tmp_dir: ~不起作用。更好的是从Ansibles变量中获取主目录:
- name: Setting custom TMPDIR for docker
hosts: all
environment:
TMPDIR: "{{ ansible_env.HOME }}"
tasks:
- name: Test tmpdir
shell: "echo $TMPDIR; docker-compose --version"

这完全避免了手动维护系统特定的路径,因此可以轻松地重新使用它。

它仍然不是一个完美的解决方案,但是至少我们可以仅针对主要手册进行设置,而不必为每个任务设置大量的 environment指令。

关于docker - 在Ansible中全局设置TMPDIR以将Docker与/tmp上的noexec标志一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59153949/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com