我让 PHP-FPM 监听 Unix 域套接字,并www使用以下值配置了池(唯一存在的):
slowlog = /$pool.log.slow
request_slowlog_timeout = 10s
Run Code Online (Sandbox Code Playgroud)
为了测试,我将 max_execution_time 设置php.ini为 20 秒。然后我创建了一个测试脚本:
<?php
while(1){
$i++;
}
?>
Run Code Online (Sandbox Code Playgroud)
然后通过网络浏览器访问它。脚本最终超时,原因是max_execution_time但日志仍为空:
root@b7e4a919c988:/var/www/html# ll /www.log.slow
-rw-rw-rw-. 1 www-data root 0 Jan 4 21:31 /www.log.slow
Run Code Online (Sandbox Code Playgroud)
不过,PHP-FPM 日志似乎表明它期望记录缓慢的运行:
[04-Jan-2018 21:37:28] WARNING: [pool www] child 9382, script '/var/www/html/test.php' (request: "GET /test.php") executing too slow (13.061999 sec), logging
Run Code Online (Sandbox Code Playgroud)
我尝试了各种方法,例如使用循环sleep(10000)或将while循环放入函数中(以防万一它无法构建堆栈跟踪),但似乎没有什么可以让它将回溯打印到日志中。日志文件本身的存在似乎也表明 FPM 预计会写入缓慢的请求。
此时我只是不知道还要检查什么。
假设我有 Docker Swarm 服务myservice1和myservice2. 如何删除这些服务并等待关联的容器停止?
在 Ubuntu 中,USB 驱动器在/media/<user>/<drive>插入时会自动安装。我想用它来使新连接的 USB 驱动器在正在运行的 Docker 容器中可用。所以我习惯-v /media/<user>:/media/<user>将USB挂载点的整个父目录挂载到容器中。
如果在容器启动之前连接了 USB 驱动器,则此方法效果很好。在这种情况下,USB 挂载点具有权限0777并且属于<user>. 如果在容器已经运行时连接了 USB 驱动器,则挂载点会出现在容器中,但具有权限0700并由 拥有root!
谁能解释一下这里可能发生的事情吗?我可以想象,默认情况下,USB 驱动器会自动安装为0700属于root,然后一些其他机制会启动,将其更改为0777和<user>。只是 Docker 没有接收到更改。这是真的?
我已经挖掘了大量的论坛主题和邮件列表,但无法弄清楚其中的机制。我还尝试了一些 udev 规则(例如这个),但没有效果。
我正在尝试将我的项目移至 docker,并且我一直在使用 alpine 变体。这是一个带有 postgres 数据库的 django 项目
这是我安装依赖项的方法:
...
ADD ./requirements.txt /srv/sites/mysite/requirements.txt
RUN echo "http://mirror.leaseweb.com/alpine/edge/testing" >>
/etc/apk/repositories
RUN apk add --no-cache --virtual .build-deps \
build-base postgresql-dev libffi-dev gcc libc-dev linux-headers bash \
geos geos-dev jpeg-dev zlib-dev \
&& pip install -r requirements.txt \
&& find /usr/local \
\( -type d -a -name test -o -name tests \) \
-o \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \
-exec rm -rf '{}' + \
&& runDeps="$( \ …Run Code Online (Sandbox Code Playgroud) 更新 2.我想将所有流量添加并转发到localhost/admin/而不是localhost/.
localhost/(然后通过应用获取302 localhost/login),localhost/overview,localhost/books/details, ETC。localhost/admin/localhost/admin/login(通过申请获得302 )localhost/admin/overviewlocalhost/admin/books/detailslocalhost/admin/(我localhost/login通过申请得到了302),
我也可以使用ingrees-nginx-controller而不是安装文件。
在 docker nginx.conf 中(或类似于 k8s)
server {
listen 80 default_server;
listen [::]:80 default_server;
...
location /admin {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host/admin;
proxy_pass http://<conteiner2>.docker-network;
}
...
}
Run Code Online (Sandbox Code Playgroud)
Update1
对于 kubernetes,我正在尝试设置为此,ingress-nginx
我安装了并使用此 YAMLingress-nginx-controller设置:ingress-nginx
apiVersion: …Run Code Online (Sandbox Code Playgroud) 我们在 RHEL 主机上使用 Red Hat 容器映像,全部基于其 ubi7 或 ubi8 映像,默认情况下以默认用户 (uid 1001) 运行。
当容器需要对主机目录进行写访问(即写入日志或临时文件)时,这会带来挑战,因为容器中保存了主机的UID和GID,并且容器写入的文件将归UID所有容器用户的。
据我所知,这给我留下了两个选择:
通常,我只会在容器映像内创建一个匹配的用户:组组合,在需要时重置所有权和权限并重建它,但对于红帽创建的映像,这意味着大量的跑腿工作,因为一切都是如此使用 UID 1001 运行,并且有许多脚本(container-entrypoint fix-permissions、generate-container-user)强制以这种方式运行。
我是否正确理解了一切,或者是否有另一种(更好的)方法来做到这一点?
我一直在 digitalocean 上使用 Fedora CoreOS 版本 31.20200505.3.0 (图片取自此处https://getfedora.org/coreos/download?tab=cloud_operators&stream=stable)
默认用户核心,但需要提升才能使用docker
使用命令通过二进制文件安装 docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o ~/bin/docker-compose
chmod +x ~/bin/docker-compose
Run Code Online (Sandbox Code Playgroud)
由于错误而不起作用:“[6261]加载Python lib'/tmp/_MEI7CUfMy/libpython3.7m.so.1.0'时出错:dlopen:libcrypt.so.1:无法打开共享对象文件:没有这样的文件或目录”
所以我尝试通过替代安装
curl -L --fail https://github.com/docker/compose/releases/download/1.25.5/run.sh -o ~/bin/docker-compose
chmod +x ~/bin/docker-compose
Run Code Online (Sandbox Code Playgroud)
(作为 root)但是随后出现了无法访问的绑定安装的问题。使用此处的解决方案解决/sf/ask/1700203151/(添加:Z)到选项并修改 ~/bin/docker-compose shell 脚本因此。
但随后我收到错误“无法连接到位于 http+docker://localhost 的 Docker 守护进程 - 它正在运行吗?”
如果running docker-compose sh我docker run hello-world收到“docker:尝试连接到 unix:///var/run/docker.sock 处的 Docker 守护程序套接字时权限被拒绝:发布http://%2Fvar%2Frun%2Fdocker.sock/v1.40 /containers/create:拨打 unix /var/run/docker.sock:连接:权限被拒绝。请参阅“docker run --help”。”
此时我正在考虑其他容器发行版或 debian。
谁能指出如何在 Fedora CoreOS 上安装 docker-compose?
UPD:感谢 @Bert 提示,这解决了 docker-compose …
我继续参考以下站点进行工作\n(我不使用 EKS。我使用 kops 在 ec2 上创建 k8s)
\n\n当我尝试打电话时,kubectl get service我收到消息:error: You must be logged in to the server (Unauthorized)
这是我所做的:
\n设置IAM用户(创建用户并添加角色)
\n集群状态存储(S3)
\n准备本地环境
\nexport NAME=myfirstcluster.example.com \nexport KOPS_STATE_STORE=s3://prefix-example-com-state-store\nRun Code Online (Sandbox Code Playgroud)\n创建集群配置kops create cluster--zones=us-west-2a${NAME}
构建集群kops update cluster ${NAME} --yes
\xe2\x98\x85成功\xe2\x98\x85
\nkubectl get nodes,我不断收到错误:You must be logged in to the server (Unauthorized) …概括:
我有一个运行 kubectl port-forward 的 docker 容器,将作为 k8s 服务运行的 postgres 服务的端口 (5432) 转发到本地端口 (2223)。在 Dockerfile 中,我暴露了相关端口 2223。然后我通过发布该端口来运行容器 ( -p 2223:2223)
现在,当我尝试通过访问 postgres 时psql -h localhost -p 2223,出现以下错误:
psql: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Run Code Online (Sandbox Code Playgroud)
但是,当我docker exec -ti对上述容器执行操作并运行上述 psql 命令时,我能够连接到 postgres。
Dockerfile 命令:
EXPOSE 2223
CMD ["bash", "-c", "kubectl -n namespace_test port-forward service/postgres-11-2 2223:5432"]
Run Code Online (Sandbox Code Playgroud)
Docker 运行命令:
docker run -it --name=k8s-conn-12 -p 2223:2223 my_image_name:latest
Run Code Online (Sandbox Code Playgroud)
docker …
我想更好地理解 - 为什么 Docker 镜像是特定于架构的?为什么 ARM 处理器架构需要与 ARM64 AArch32 等不同的映像?
Docker 镜像显然包含处理器特定的指令,这使得它们依赖于架构。docker镜像
的哪一部分包含处理器特定指令以及为什么?
为什么Docker-Runtime 不提供独立于架构的抽象层?
是吗,因为否则该层将与虚拟机中的 HyperVisor 层相当,并且不再是“轻量级”的?
docker ×10
kubernetes ×3
mount ×2
alpine ×1
amazon-ec2 ×1
amazon-eks ×1
django ×1
docker-swarm ×1
kubectl ×1
linux ×1
nginx ×1
php ×1
php-fpm ×1
php7 ×1
psql ×1
python ×1
ubuntu ×1
usb ×1