我目前正在努力限制我调用的用户的进程数sandbox。
我在里面配置了进程限制,/etc/security/limits.conf如下所示:
sandbox hard nproc 100
Run Code Online (Sandbox Code Playgroud)
但是如果我想以sandbox用户身份连接到容器,ssh 会返回:
shell request failed on channel 0
Run Code Online (Sandbox Code Playgroud)
所以我登录root并检查了sandbox用户正在运行的进程数,但它少于 5。
那么是什么阻止了我通过 ssh 登录?
没有为sandbox用户设置限制 ssh 登录工作正常。
或者有没有其他方法可以防止分叉炸弹攻击?
我正在尝试使用supervisord管理一个进程,但该进程没有在前台运行的选项:它总是守护进程。(那是 Zabbix 服务器)。
有没有办法用主管管理守护进程?有什么工具可以让它在前台运行?或者,以某种方式使用pidfile?
我已将jenkins用户添加到docker组中,认为它会允许 Jenkins 作业运行 Docker 命令。如果我切换到jenkins用户,我可以验证它是否有效(手动):
ubuntu@hostname:~$ ps aux | grep java
jenkins 2210 9.5 7.5 1950316 292896 ? Sl 00:01 1:00 /usr/bin/java -jar /data/jenkins/jenkins-1.586.war --httpPort=8080 -Xloggc:/var/log/jenkins/gc.log
ubuntu@hostname:~$ getent group docker
docker:x:999:jenkins
ubuntu@hostname:~$ ls -la /var/run/docker.*
-rw-r--r-- 1 root root 4 Oct 23 18:32 /var/run/docker.pid
srw-rw---- 1 root docker 0 Oct 23 18:32 /var/run/docker.sock
ubuntu@hostname:~$ sudo su -s /bin/bash jenkins
jenkins@hostname:/home/ubuntu$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Run Code Online (Sandbox Code Playgroud)
但是,在 Jenkins 构建/作业期间,它没有权限:
# …Run Code Online (Sandbox Code Playgroud) 我有一个backup.service每小时调用一次backup.timer。不幸的是,在容器内运行的备份脚本可以成功完成,但警告返回非零退出代码。因此,尽管一切可能都有效,但容器会以非零退出代码停止。因此机组进入故障状态。
在这种情况下,计时器似乎不会再次启动该单元,尽管我在 systemd 文档中没有找到任何内容。
明确地说:对我来说,让容器以非零退出代码停止是完全可以的。但是我的计时器不起作用。
我现在可以将该脚本封装到另一个称为 als docker 入口点的脚本中。但我必须确保以某种方式保留输出 auf STDOUT 和 STDERR。
我也可以在单元失败后运行sudo systemctl reset-failed,但这对我来说似乎有点麻烦......(我试过了,在那种情况下计时器再次运行了单元。但它不能作为 ExecStopPost -服务文件中的任务)
有没有更好的方法来确保一个单位
我在 OSX 上使用 Docker 工具箱。
我创建了一个用于存储持久数据的数据卷容器:https : //docs.docker.com/userguide/dockervolumes/#creating-and-mounting-a-data-volume-container。
我检查过这些数据确实存储在 boot2docker VM(由 docker-machine 创建)而不是容器上,因此它会持续存在。然而,“docker-machine restart”清除了虚拟机上的这个自定义数据。
我找不到有关正在发生的事情的文档。我发现一个论坛帖子提到 /var/lib/docker 中的数据将被保留,但我找不到任何官方文档说明这一点,考虑到上面的持久存储指南没有使用这条路径,甚至没有提到这一点,这似乎也很奇怪您的数据将被删除。
这是预期的,如果是,是否有任何关于存储持久数据的正确路径的官方文档?
编辑:添加失败 senario 的示例
$ docker-machine ssh alt
docker@alt:~$ docker run -v /data:/var/lib/mysql --name mydata busybox sh -c "echo 'hello' > /var/lib/mysql/hello"
docker@alt:~$ docker run --rm --volumes-from mydata busybox sh -c "cat /var/lib/mysql/hello"
hello
docker@alt:~$ exit
$ docker-machine restart alt
Starting VM...
$ docker-machine ssh alt
docker@alt:~$ docker run --rm --volumes-from mydata busybox sh -c "cat /var/lib/mysql/hello"
cat: can't open '/var/lib/mysql/hello': …Run Code Online (Sandbox Code Playgroud) 如何防止我的预构建 docker 容器的用户能够访问该容器正在运行的实例中的 shell?我已经用谷歌搜索并阅读了与此场景相关的所有帖子,但没有找到可行的解决方案。我试图阻止访问容器中的给定资源,为了这个查询,假设它是配置文件中的序列号。我正在构建基于ubuntu的java:7图像图像图像。
要测试您的解决方案,请执行以下操作:
创建并运行您的 docker 容器
导出您的容器
docker export [容器名称] | gzip -c > mycontainer.tar.gz
在外部系统上导入您的容器
gzip -dc mycontainer.tar.gz | docker import - [容器名称]
运行容器
使用以下任何/所有方法将 shell 放入正在运行的容器中:
docker exec -it [容器名称] bash
docker attach [容器名称]
docker run -ti --entrypoint=/bin/bash [容器名称]
[container name] 是您的容器的名称
bash、dash 和 sh 都是有效的 shell
我正在创建一个运行与特定 Java 版本相关联的自定义应用程序的 dockerfile。
我正在使用 centos7 基本映像,因为这是我所指的一篇文章所使用的,而且因为我必须使用某些东西,所以它与任何文章一样好。老实说,我不在乎我使用的是什么用户空间。这张图片的重点是托管的软件,Linux 发行版本身只是达到目的的一种手段——重要的是,JDK 不会被其他应用程序或用户使用。
如上所述,我的应用程序与我正在使用的特定 Java 版本相关联 - 对 Java 版本的任何更新都需要在发布之前对该特定版本的软件进行全面回归测试。
我所关注的文章从相关的 dockerfile JDK 安装部分开始,如下所示:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel \
&& yum clean all
Run Code Online (Sandbox Code Playgroud)
这还不够具体,任何时候构建图像都会得到一个随机版本的 Java,这不是我想要的,我需要一个特定版本的 Java。
我将 docker 文件更改为如下所示:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel-1.8.0.65-3.b17.el7 \
&& yum clean all
Run Code Online (Sandbox Code Playgroud)
并且 docker 镜像构建良好。那是在十二月。
本周,我需要对软件的不同部分进行小的更改并重新构建映像的新版本,但映像构建现在失败了。
构建现在失败,因为该特定版本的 java 包不再可用(至少,我认为这就是它告诉我的):
Error: Package: 1:java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64 …Run Code Online (Sandbox Code Playgroud) 我已经在我的 ufw 上设置了一些规则,但我认为它并没有阻止任何事情。这是它目前的状态:
~# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
To Action From
-- ------ ----
22 ALLOW IN Anywhere
80 ALLOW IN Anywhere
27015:27115/udp ALLOW IN Anywhere
27015:27115/tcp ALLOW IN Anywhere
22 (v6) ALLOW IN Anywhere (v6)
80 (v6) ALLOW IN Anywhere (v6)
27015:27115/udp (v6) ALLOW IN Anywhere (v6)
27015:27115/tcp (v6) ALLOW IN Anywhere (v6)
Run Code Online (Sandbox Code Playgroud)
如您所见,它默认拒绝传入连接并且只允许某些端口。但是,我刚刚在端口 8083 上设置了一个新服务,我可以从外部访问它。为什么会这样?
我已经使用 docker 容器来运行这个新服务,以防万一。
我有dockerised一个 wordpress 应用程序,现在我是一个纯粹主义者,不想包含nginx在 docker 容器中,也不想在nginx容器和php-fpm容器之间共享任何状态。
我想php-fpm作为一个独立的网络服务器(如 ruby 中的 unicorn 或 python 中的 gunicorn)运行,为 wordpress 站点提供所有内容(html、css 和图像)。并nginx在它前面运行一个反向代理(缓存静态内容)。这样我就可以保持关注点的分离,并且我没有nginx将流量转发到nginx服务器。
的默认配置php-fpm只允许处理 php 文件。可以php-fpm更改的conf吗?如何?这是个好主意吗?
https://msdn.microsoft.com/en-us/virtualization/windowscontainers/deployment/deployment_nano谈到在 Windows 下运行 nanoserver docker 镜像:
码头工人拉微软/纳米服务器
这是否意味着我们应该能够在 Docker 运行的任何地方(例如 Linux)运行 nanoserver?