标签: docker-compose

为什么在docker容器中安装PHP时没有php.ini文件?

我正在docker-compose用来设置一个最小的nginx+php-fpm应用程序,但由于某种原因,docker 容器上没有 php.ini 文件(我知道是因为phpinfo()Loaded Configuration File: (none))。

这是我的docker-compose.yml文件:

web:
  image: nginx
  ports:
    - "8080:80"
  volumes:
    - ./site.conf:/etc/nginx/conf.d/site.conf
  links:
    - php

php:
  image: php:5-fpm
  volumes:
    - .root:/var/www/html:ro
  command: bash -c "apt-get update && apt-get install -y php5-mysql && php-fpm"
Run Code Online (Sandbox Code Playgroud)

site.conf 也很简单:

server {
    index index.php;
    server_name local.myspicesage.com;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param …
Run Code Online (Sandbox Code Playgroud)

php5 php.ini php-fpm docker docker-compose

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

nginx 和 php-fpm:从上游读取响应头时“主脚本未知”

我想将任何api/*路由传递给 php-fpm。特别是index.php因为我使用 Symfony。这是唯一应该使用 php 的路径。其他任何内容都将从/usr/share/nginx/html/public(仅 HTML 文件和 CSS)加载。

我已经尝试过,但出现错误:

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
Run Code Online (Sandbox Code Playgroud)

我的 nginx 配置如下:

upstream php {
  server php:9000;
}

server {
  listen 80 default_server;
  server_name impressive.local;
  index index.html index.php;
  root /usr/share/nginx/html/public;

  location /api {
    root /usr/share/nginx/html/api;
    try_files $uri /index.php;
  }

  location ~ \.php$ {
    fastcgi_pass php;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi.conf;
  }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

php_1  | [13-Jan-2019 23:22:54] NOTICE: fpm is running, pid …
Run Code Online (Sandbox Code Playgroud)

nginx php-fpm docker-compose

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

Docker Compose 返回错误“网络具有重叠的 IPv4”

首先说我对 Docker 完全陌生,我还不熟悉 Docker 生态系统。

我尝试执行的是创建一个docker-composer.yml在我的项目的本地开发环境中使用的。

我已经将wp-local-docker用于我的 WordPress 项目,但我也有一些旧项目具有不同的要求,因此,我做了自己的docker-compose.yml. 我自己的代码docker-compose.yml如下:

version: "3.4"
services:
   database:
      image: mysql:latest
      ports:
         - "3306:3306"
      environment:
         MYSQL_ROOT_PASSWORD: password
         MYSQL_DATABASE: appdb
         MYSQL_USER: appuser
         MYSQL_PASSWORD: password
      volumes:
         - $PWD/data/db:/var/lib/mysql
      networks:
          app_net:
              ipv4_address: 192.168.50.10
   phpmyadmin:
      image: phpmyadmin/phpmyadmin:latest
      links:
         - database:mysql
      ports:
         - "8181:80"
      environment:
         MYSQL_ROOT_PASSWORD: password
         MYSQL_USER: appuser
         MYSQL_PASSWORD: password
         PMA_HOST: mysql
         PMA_PORT: 3306
         PMA_USER: appuser
         PMA_PASSWORD: password
      networks:
         app_net:
            ipv4_address: 192.168.50.11
   web:
      build: $PWD/ApachePHP
      depends_on:
         - database
      links:
         - database:mysql …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose

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

为什么 Firewalld 不过滤在我的 Docker 容器中运行的服务?

从 iptables 迁移到firewalld 并使用firewall-cmd 更新规则后,我的服务被正确过滤。然后我使用 Docker 将所有服务移至容器,并使用 docker-compose 运行所有内容。

我的默认区域是“公共”。我已手动将 docker0、我的外部(以太网)接口以及 Docker 容器似乎通过 (br-304604a31e79) 与外界通信的接口添加到“公共”区域。我已运行命令将带或不带标志的接口移至“公共”区域--permanent

当我用来nmap扫描我的服务器时,Docker 容器中运行的服务仍然可以访问(仍然是“开放”,而不是“过滤”)。

为什么 Firewalld 不过滤在我的 Docker 容器中运行的服务?

firewalld docker docker-compose

4
推荐指数
1
解决办法
1008
查看次数

错误:无法从“11.7”确定 PostgreSQL 版本

我找到了一个 Django 项目,但未能通过以下方式使其在 Docker 容器中运行:

  1. git clone https://github.com/hotdogee/django-blast.git

我有以下 Dockerfile:

FROM python:2
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
Run Code Online (Sandbox Code Playgroud)

对于docker-compose.yml我来说:

version: "3"

services:
  db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
Run Code Online (Sandbox Code Playgroud)

接下来,我遇到了这个错误:

$ docker-compose build
...
    ERROR: Command errored out with exit status 1:
     command: /usr/local/bin/python -c 'import …
Run Code Online (Sandbox Code Playgroud)

postgresql python django docker-compose

4
推荐指数
1
解决办法
3541
查看次数

Docker PostgreSQL 将数据库编码更改为 UTF-8

我想通过 docker-compose 运行一个 postgres 容器,该容器具有 COLLATE 和 CTYPE 'C' 以及数据库编码 'UTF-8'。但这看起来是不可能的。

这是 docker-compose.yml 上的部分:

database:
    image: postgres:latest
    volumes:
        - db:/var/lib/postgresql/data
    environment:
        POSTGRES_PASSWORD: test
        LC_COLLATE: C
        LC_CTYPE: C
        LANG: C.UTF-8
Run Code Online (Sandbox Code Playgroud)

这是日志输出:

The database cluster will be initialized with locales.
The default text search configuration will be set to "english".
  COLLATE:  C
  CTYPE:    C
  MESSAGES: C.UTF-8
  MONETARY: C.UTF-8
  NUMERIC:  C.UTF-8
  TIME:     C.UTF-8
The default database encoding has accordingly been set to "SQL_ASCII".
Run Code Online (Sandbox Code Playgroud)

我必须将数据库编码设置为 UTF-8,并将 COLLATE 和 CTYPE 设置为“C”而不是“C.UTF-8”,否则从属应用程序将无法连接。

我在任何文档或其他任何地方都没有找到任何内容。

postgresql docker docker-compose

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

Docker Compose 端口未暴露?

我有一个简单的基于 Python 的 Web 服务器,在使用 docker compose 设置的容器中运行,该容器公开端口 8080。

\n

当我 docker-compose up 服务时,它报告端口已公开,但端口未向外部公开。

\n

接下来我应该看什么诊断?

\n

这是一个典型的运行

\n
\xe2\x9e\x9c  demo04 sudo docker-compose up -d\nRecreating leagueweb_database ... done\nRecreating leagueweb_server   ... done\n
Run Code Online (Sandbox Code Playgroud)\n

Python Web 服务器(使用 CherryPy)报告它已正常启动并打开端口 8080。

\n
leagueweb_server | [25/Jan/2022:11:27:21] ENGINE Serving on http://127.0.0.1:8080\n
Run Code Online (Sandbox Code Playgroud)\n

Docker 报告它正在转发端口 8080

\n
\xe2\x9e\x9c  demo04 sudo docker-compose ps\n       Name                     Command                  State                              Ports\n------------------------------------------------------------------------------------------------------------------------\nleagueweb_database   /entrypoint.sh mysqld            Up (healthy)   0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp\nleagueweb_server     ./wait-for-it.sh database: ...   Up             0.0.0.0:8080->8080/tcp,:::8080->8080/tcp\n
Run Code Online (Sandbox Code Playgroud)\n

从远程 PC 进行测试,我可以看到虽然端口 3306 是外部开放的,但端口 8080 却没有。

\n
PS …
Run Code Online (Sandbox Code Playgroud)

python cherrypy docker docker-compose

4
推荐指数
1
解决办法
5430
查看次数

如何在 Fedora CoreOS 上安装 docker-compose

我一直在 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 shdocker 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 …

docker docker-compose

3
推荐指数
1
解决办法
4797
查看次数

Docker - PHP 7.2 FPM Alpine - Imagick

我使用 Docker 镜像php:7.2-fpm-alpine作为基础镜像,使用以下命令安装 Imagick:

RUN apk add --update --no-cache autoconf g++ imagemagick-dev libtool make pcre-dev \
    && pecl install imagick \
    && docker-php-ext-enable imagick \
    && apk del autoconf g++ libtool make pcre-dev
Run Code Online (Sandbox Code Playgroud)

构建一切顺利,我有带有 Imagick 的 php7.2,但由于以下错误而无法使用:

UnableToOpenConfigureFile `coder.xml' @ warning/configure.c/GetConfigureOptions/714
Run Code Online (Sandbox Code Playgroud)

我试图解决这个问题两个小时。我尝试添加 XML 库但没有任何运气。有任何想法吗?

php-fpm imagemagick docker php7 docker-compose

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

docker-compose 只向外界暴露一个网络

我有一个通过 docker-compose 文件创建的新应用程序。该文件包含2个网络:

version: '2.1'

# ----------------------------------
# Services
# ----------------------------------
services:
  application:
    image: tianon/true
    volumes:
      - ${APPLICATION_PATH}:/var/www

  nginx:
    build:
      context: ./docker/nginx
    volumes_from: 
      - application
    volumes:
      - ${DOCKER_STORAGE}/nginx-logs:/var/log/nginx
      - ${NGINX_SITES_PATH}:/etc/nginx/sites-available
    ports:
      - "${NGINX_HTTP_PORT}:80"
      - "${NGINX_HTTPS_PORT}:443"
    networks:
      - frontend
      - backend

  redis:
    build:
      context: ./docker/redis
    volumes: 
      - ${DOCKER_STORAGE}/redis:/data
    ports:
      - "${REDIS_PORT}:6379"
    networks: 
      - backend

# ----------------------------------
# Networks
# ----------------------------------
networks:
  frontend:
    driver: "bridge"
  backend:
    driver: "bridge"

# ----------------------------------
# Volumes
# ----------------------------------
volumes:
  redis:
    driver: "local"
Run Code Online (Sandbox Code Playgroud)

您会注意到我这里有 2 个网络,frontend …

iptables docker docker-compose

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