我在 docker 容器中运行 php7-fpm。但是,我的 php 脚本无法访问我的 docker-compose 文件中设置的环境变量。getenv('MY_ENV_VAR')返回FALSE。
我已更改/etc/php/7.0/fpm/pool.d/www.conf为包含clear_env = no并重新启动,service php7.0-fpm restart但我的环境变量 start 不存在。
我也试过编辑 /etc/php/7.0/fpm/php.ini 包含行variables_order = "EGPCS".
当我在 bash shell 上执行到我的容器时,我可以看到我的变量存在。只是它们在我的 php 脚本中无法访问。
我错过了什么?
我有一个 docker-compose 设置在我的本地机器上完美运行,用于使用 nginx、php7-fpm 和 mysql 的 symfony 项目。
我经常需要通过 composer 安装新的包,所以我只是像这样将命令传递到我的 php-fpm 容器:
docker-compose exec my-php-fpm-container composer install
Run Code Online (Sandbox Code Playgroud)
问题是以 root 身份安装所有软件包,所以我每次安装时都必须 chown。
我知道标志“--user”存在,但如果我使用它,它会出现以下错误:
错误:没有这样的服务:作曲家
有没有办法以本地机器用户身份运行 docker-compose exec 命令,以便新的 Composer 安装的文件和文件夹使用我的本地 linux 用户所有权而不是 root 创建自己?
我正在尝试在使用多种应用程序技术(Java、Rails 和各种 DB)的环境中集中日志记录。
我们希望开发人员使用 Docker Compose 来调用堆栈,但我们希望他们引用中央日志源 (ELK) 来调试问题,而不是尝试打开 shell 以运行 Docker 容器。
应用程序都写入文件系统而不是 STDOUT/STDERR,这会删除与 Docker 日志驱动程序相关联的所有选项,还有日志喷口。
我们所做的是配置容器,让 rsyslog 包含应用程序日志文件,并将这些文件转发到具有 syslog 输入的 logstash。这在将日志从 A 移动到 B 方面起作用,但是基于 syslog 输入在 ELK 中管理多技术日志是可怕的(例如,试图捕获多个 Java 堆栈跟踪或 MySQL 慢查询)。
有一个更好的方法吗?我是否应该在每个容器中运行 logstash,以便我可以将过滤器和编解码器直接应用于日志文件,这样我就不必依赖 syslog 输入?
是否有某种方法可以将 Docker 日志驱动程序与写入文件系统的应用程序日志文件一起使用?
我有 Nginx 将请求从浏览器路由到 Express API 或我的 React 服务器,但是,在控制台中,我继续收到待处理的 xhr 请求,然后超时并出现 502 bad gateway 错误,这通常是由于 Nginx 无法将请求传递给“上游”,在本例中是我的 Express API,通常我能够检查文件/var/log/nginx/,但当所有这些都发生在 Docker 容器内时,我不确定如何执行此操作。
我尝试过这种docker logs <container name/id>命令方法,但我得到了Error: No such container: <container-id>。
我在运行后从最后一行获取了容器 ID docker-compose up --build,它说Successfully built <container-id>
我复制了该 ID 并docker logs <container-id>在 iTerm 中的第二个面板上运行。
然后我做了一个docker ps并得到了这个输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nf37be54a9e60 complexly_api "npm run dev" 43 minutes ago Up 28 minutes complexly_api_1\n9b87bc0aa343 …Run Code Online (Sandbox Code Playgroud) 我正在从 docker 迁移到 podman(不直接迁移到 kubernetes,因为在这一点上这肯定是矫枉过正的)。
现在,许多优雅的配置都可以作为 docker-compose 设置——但是 docker-compose 依赖于 docker 守护进程来启动(并保持运行)相互依赖的容器。
podman 的做法是让 systemd 单元文件相互依赖,并让 systemd 进行监控和启动(和关闭)。
现在,手动将 docker-compose 设置转换为单元文件很容易出错,而且有点乏味。
是否有一个已知的 docker-compose 兼容阅读器的已知来源,我可以设置它来生成 systemd 单元文件?
我正在努力解决Docker Compose(版本2或版本3)。我正在尝试添加多个subnets,以便各种服务可以相互访问,但从IPv4不同的子网获取分配的地址。
这是我当前的配置:
networks:
custom:
driver: "bridge"
ipam:
driver: default
config:
- subnet: 10.10.10.0/16
gateway: 10.10.10.1
- subnet: 100.100.100.0/16
gateway: 100.100.100.1
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
Creating network "docker-setup-test_custom" with driver "bridge"
ERROR: Pool overlaps with other one on this address space
Run Code Online (Sandbox Code Playgroud) 在阅读了一些文章后,我仍然不确定应该使用哪个用户来运行 docker 容器。以 root 用户身份运行 docker 容器时是否存在任何安全问题?以 root 用户身份运行 docker 容器是否可以,或者我应该使用我的普通用户,将他添加到“docker”组然后运行我的容器还是我应该创建一个仅用于管理/创建 docker 容器的附加用户?
root@myDockerHost:/opt/myDockerContainer# docker-compose up -d
VS
chris@myDockerHost:/opt/myDockerContainer# docker-compose up -d
VS
dockerusr@myDockerHost:/opt/myDockerContainer# docker-compose up -d
(我说的是我的 docker 主机上的用户 - 而不是容器内的用户!)
我有以下 nginx.conf 文件:
server {
listen 8080;
server_name dummy_server;
root /usr/share/nginx/html;
location / {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization,DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
default_type 'application/json';
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
add_header 'Content-Type' 'application/json';
if ($request_uri ~* "([^/]*$)" ) {
set $last_path_component $1;
}
try_files $last_path_component.json $last_path_component.json =404;
}
}
Run Code Online (Sandbox Code Playgroud)
我想healthcheck.json在localhost:8080/v1/healthcheck被要求时提供服务。但是,如果我没有明确点击 ,nginx …
我正在尝试使用 linux 盒子(运行 ubuntu 18.04)和 nginx、gunincorn、letsencrypt 和 docker 来提供 python-django web 应用程序。在学习了许多在线教程之后,我按照本教程http://pawamoy.github.io/2018/02/01/docker-compose-django-postgres-nginx 成功通过端口 80 通过 http 提供了应用程序服务。 html。
然而,我现在真的很难通过端口 443 通过 https 进行部署。我想也许我不理解基本的 docker 概念。我运行时遇到的错误sudo docker-compose up如下。
NGINX 错误:
nginx_1 | nginx: [emerg] open() "/etc/letsencrypt/options-ssl-nginx.conf" failed (2: No such file or directory) in /etc/nginx/conf.d/local_ssl.conf:28
我相信这是因为我没有链接 docker-compose.yml 文件中的 options-ssl-nginx.conf 文件,也许是通过卷?我不知道这是否正确。我的 docker-compose.yml 文件和 nginx.conf 文件的相关部分如下:
docker-compose.yml:
version: '3'
services:
# database containers
database1:
...
# web container
djangoapp:
...
# reverse proxy container (nginx)
nginx:
image: …Run Code Online (Sandbox Code Playgroud) 我管理一些安装了 Docker CE 的 Debian 服务器,并且 docker-compose 编排了多个服务(每台机器大约 20 个容器)。
每个服务都配置有restart: always每个服务都在 docker-compose 中但是,有一些随机服务(通常每台计算机有 1-2 个)可以正确关闭,但在主机重新启动期间不会重新启动。这种行为是完全随机的。有时所有服务都会启动,有时 docker-compose.yml 文件中的一项服务不会重新启动。
以下是 Traefik 正确关闭但未出现的示例:
$ cat docker-compose.yml
version: '3'
services:
reverse-proxy:
image: traefik:1.7
restart: always
command: --web
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.toml:/traefik.toml
networks:
- web
Run Code Online (Sandbox Code Playgroud)
$ docker-compose ps
Name Command State Ports
-----------------------------------------------------------
traefik_reverse-proxy_1 /traefik --web Exit 128
Run Code Online (Sandbox Code Playgroud)
$ docker-compose logs --tail 6 -t
Attaching to traefik_reverse-proxy_1
reverse-proxy_1 | 2022-01-21T14:05:28.042399112Z …Run Code Online (Sandbox Code Playgroud)