标签: docker-compose

配置php-fpm访问docker中的环境变量

我在 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 脚本中无法访问。

我错过了什么?

environment-variables php-fpm docker docker-compose

5
推荐指数
2
解决办法
1万
查看次数

docker-compose exec composer 作为用户

我有一个 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 创建自己?

php-fpm symfony docker composer docker-compose

5
推荐指数
1
解决办法
8656
查看次数

如何将应用程序日志从 Docker 容器转发到 ELK

我正在尝试在使用多种应用程序技术(Java、Rails 和各种 DB)的环境中集中日志记录。

我们希望开发人员使用 Docker Compose 来调用堆栈,但我们希望他们引用中央日志源 (ELK) 来调试问题,而不是尝试打开 shell 以运行 Docker 容器。

应用程序都写入文件系统而不是 STDOUT/STDERR,这会删除与 Docker 日志驱动程序相关联的所有选项,还有日志喷口。

我们所做的是配置容器,让 rsyslog 包含应用程序日志文件,并将这些文件转发到具有 syslog 输入的 logstash。这在将日志从 A 移动到 B 方面起作用,但是基于 syslog 输入在 ELK 中管理多技术日志是可怕的(例如,试图捕获多个 Java 堆栈跟踪或 MySQL 慢查询)。

有一个更好的方法吗?我是否应该在每个容器中运行 logstash,以便我可以将过滤器和编解码器直接应用于日志文件,这样我就不必依赖 syslog 输入?

是否有某种方法可以将 Docker 日志驱动程序与写入文件系统的应用程序日志文件一起使用?

logstash docker docker-compose

5
推荐指数
1
解决办法
3468
查看次数

如何从 Docker 中访问 nginx 服务器日志?

我有 Nginx 将请求从浏览器路由到 Express API 或我的 React 服务器,但是,在控制台中,我继续收到待处理的 xhr 请求,然后超时并出现 502 bad gateway 错误,这通常是由于 Nginx 无法将请求传递给“上游”,在本例中是我的 Express API,通常我能够检查文件/var/log/nginx/,但当所有这些都发生在 Docker 容器内时,我不确定如何执行此操作。

\n\n

我尝试过这种docker logs <container name/id>命令方法,但我得到了Error: No such container: <container-id>

\n\n

我在运行后从最后一行获取了容器 ID docker-compose up --build,它说Successfully built <container-id>

\n\n

我复制了该 ID 并docker logs <container-id>在 iTerm 中的第二个面板上运行。

\n\n

然后我做了一个docker ps并得到了这个输出:

\n\n
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 docker-compose

5
推荐指数
1
解决办法
5万
查看次数

Podman:将 docker-compose 文件转换为 systemd 单元文件的方法

我正在从 docker 迁移到 podman(不直接迁移到 kubernetes,因为在这一点上这肯定是矫枉过正的)。

现在,许多优雅的配置都可以作为 docker-compose 设置——但是 docker-compose 依赖于 docker 守护进程来启动(并保持运行)相互依赖的容器。

podman 的做法是让 systemd 单元文件相互依赖,并让 systemd 进行监控和启动(和关闭)。

现在,手动将 docker-compose 设置转换为单元文件很容易出错,而且有点乏味。

是否有一个已知的 docker-compose 兼容阅读器的已知来源,我可以设置它来生成 systemd 单元文件?

systemd docker-compose podman

5
推荐指数
1
解决办法
1074
查看次数

Docker Compose 和多个子网

我正在努力解决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 docker-compose

5
推荐指数
1
解决办法
2万
查看次数

“docker-compose up”作为 root 用户还是非 root 用户?

在阅读了一些文章后,我仍然不确定应该使用哪个用户来运行 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 主机上的用户 - 而不是容器内的用户!)

security linux docker docker-compose

5
推荐指数
1
解决办法
1万
查看次数

除非在 url 中指定 .json,否则 nginx 不会提供 json 文件

我有以下 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.jsonlocalhost:8080/v1/healthcheck被要求时提供服务。但是,如果我没有明确点击 ,nginx …

nginx docker-compose

5
推荐指数
1
解决办法
4811
查看次数

nginx 找不到 /etc/letsencrypt/options-ssl-ngin.conf 文件

我正在尝试使用 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)

nginx django docker lets-encrypt docker-compose

5
推荐指数
1
解决办法
2万
查看次数

docker-compose `restart:always` 随机不起作用

我管理一些安装了 Docker CE 的 Debian 服务器,并且 docker-compose 编排了多个服务(每台机器大约 20 个容器)。

每个服务都配置有restart: always每个服务都在 docker-compose 中但是,有一些随机服务(通常每台计算机有 1-2 个)可以正确关闭,但在主机重新启动期间不会重新启动。这种行为是完全随机的。有时所有服务都会启动,有时 docker-compose.yml 文件中的一项服务不会重新启动。

以下是 Traefik 正确关闭但未出现的示例:

  1. 配置为自动重启的服务:
$ 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)
  1. 退出代码是 128
$ docker-compose ps
         Name                Command        State     Ports
-----------------------------------------------------------
traefik_reverse-proxy_1   /traefik --web   Exit 128
Run Code Online (Sandbox Code Playgroud)
  1. 日志显示该服务已正确关闭,但此后没有任何活动迹象:
$ 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)

debian docker docker-compose

5
推荐指数
0
解决办法
6189
查看次数