主机:ubuntu 18.04
可靠:2.9.20
docker-ce: 5:20.10.6~3-0~ubuntu-bionic
- name: test container
when:
- ansible_system == 'Linux'
- ansible_architecture == 'x86_64'
become: yes
docker_container:
name: test-01
hostname: ansible-ubuntu-20-04
image: diodonfrost/ansible-ubuntu:20.04
volumes:
- /tmp/roles:/root/.ansible/roles
output_logs: yes
state: started
command: touch /tmp/1
interactive: yes
tty: yes
一个带有ubuntu的虚拟机,它包含一个docker,计划在容器(绝对沙箱)中测试代码。一切都已创建甚至启动,但不知何故我看不到结果。那些。touch /tmp/1挂但不运行:
root@docker-test-01:~# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc82da6238a4 diodonfrost/ansible-ubuntu:20.04 "/sbin/init touch /tmp/1…" 6 seconds ago Up 4 seconds test-01
root@docker-test-01:~# docker container exec test-01 ls /tmp/
hsperfdata_root
root@docker-test-01:~#
从主机运行 - 一切正常:
root@docker-test-01:~# docker container exec -i -t test-01 touch /tmp/1
root@docker-test-01:~# docker container exec test-01 ls /tmp/
1
hsperfdata_root
root@docker-test-01:~#
在哪里挖?
升级版。回应评论:
root@docker-test-01:~# docker container ps -a --format "{{ .Command }}"
"/sbin/init w"
不,之后——沉默。
感谢@aleksandr barakin 朝着正确的方向前进。
因为 如果任务不仅仅是运行一些代码,而是精确地运行它以查看它是否工作,那么如果我们准确返回实际存在的出口会很好。这是一个可以完成它应该做的选项的组合:
ENTRYPOINT ["/sbin/init"]在这里,我们的团队正在覆盖原始curl文件。在CMDcommand的包装器中,我们将参数传递给并确保不要忘记. 没有它什么都行不通:curldetach: no因为 没有文件\目录
123-服务器将返回给我们404,--fail说curl'y NOT returnexit 0,但是 returnexit 22,并且detach: no不会将exit命令中的任何内容转换exit 0为ansible本身。我们得到:但是,如果您更改
command: --fail --head "http://example.com/123为command: --fail --head "http://example.com/,那么它将index.html在服务器上,他们将在任何地方将其返回给我们,exit 0并且 ansible 排气将是适当的: