mysql - 使用正在运行的 nginx 代理在 docker 中运行 Teampass

标签 mysql nginx docker docker-compose

@Moderators:您可以将标签 teampass 添加到标签列表吗?

我想运行Teampass作为一个 docker 容器,并以 nginx 作为代理。

我不确定问题是否在于 Teampass 自带了 Apache 并且对我的 nginx 起作用,或者是否我得到了其他完全错误的东西。

我这样输入 enter image description here

问题是,它没有通过此页面,因为与 mySQL 端口的连接不起作用。

当我尝试安装它时,没有运行 nginx ,一切都按预期进行。但是当我使用 nginx 时,它不再运行

docker-compose 文件:

teampass:
container_name: teampass
image: teampass/teampass
ports:
- 127.0.0.1:8787:80
volumes:
- /opt/teampass:/teampass
links:
- teampass_mysql

teampass_mysql:
restart: always
image: mysql/mysql-server:5.5
ports:
- 127.0.0.1:13306:3306
environment:
- MYSQL_ROOT_PASSWORD=TEAMPASS_MYSQL_ROOT_PASSWORD
- MYSQL_DATABASE=TEAMPASS_MYSQL_DATABASE
- MYSQL_PASSWORD=TEAMPASS_MYSQL_PASSWORD
- MYSQL_USER=TEAMPASS_MYSQL_USER
volumes:
- /opt/dbteampass:/var/lib/mysql

nginx 文件:

upstream teampass {
    server 127.0.0.1:8787;
}

upstream sqlteampass {
    server 127.0.0.1:13306;
}

server {
  listen 80;
  server_tokens off;
  server_name teampass.domain.tld;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl;
  server_tokens off;
  server_name teampass.domain.tld;

  ssl_certificate /path/fullchain.pem;
  ssl_certificate_key /path/privkey.pem;

  location / {
    proxy_set_header        Host $host:$server_port;
    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_pass              http://teampass;
  }
}



server {
  listen 80;
  server_tokens off;
  server_name sql.teampass.domain.tld;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl;
  server_tokens off;
  server_name sql.teampass.domain.tld;

  ssl_certificate /path/fullchain.pem;
  ssl_certificate_key /path/privkey.pem;

  location / {
    proxy_set_header        Host $host:$server_port;
    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_pass              http://sqlteampass;
  }
}

最佳答案

首先确保容器之间的网络正常工作。

让我们从一个准系统的撰写文件开始,请注意,我现在省略了音量指令:

# docker-compose.yml

version: '2'
services:
  teampass:
      image: teampass/teampass
      ports:
        - "80:80"
      links:
          - db
  db:
      image: mysql:latest
      ports:
          - "3306:3306"
      environment:
          - MYSQL_DATABASE=teampass
          - MYSQL_PASSWORD=pass
          - MYSQL_ROOT_PASSWORD=rootpass
          - MYSQL_USER=user

如果您的旧 teampass 容器仍在运行,请确保通过 docker-compose rm -v 删除旧容器!

现在运行docker-compose up,一旦您看到 db 和 teampass 容器正在运行,您就可以验证 docker 容器是否可以互相看到:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
263d801cdf85        teampass/teampass   "/bin/sh -c /start.sh"   14 minutes ago      Up 14 minutes       0.0.0.0:80->80/tcp       dockerteampass_teampass_1
fcb750fffd4f        mysql:latest        "docker-entrypoint.sh"   14 minutes ago      Up 14 minutes       0.0.0.0:3306->3306/tcp   dockerteampass_db_1

记下您正在运行的 teampass 容器的名称。

$ docker exec -it dockerteampass_teampass_1 bash

现在您位于 teampass 容器内。要 ping 数据库容器,只需执行

$ ping db

这不应该超时!

现在转到浏览器并开始设置,确保输入 db 作为主机!

这应该会消除您的上述错误。 完成此操作后,您可以尝试通过 nginx 进行反向代理。

enter image description here

要了解有关 docker 网络的更多信息,请参阅 documentation .

关于mysql - 使用正在运行的 nginx 代理在 docker 中运行 Teampass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40223814/

相关文章:

MySQL函数计算下一个工作日给定的天数包括假期(Excel的WORKDAY)

c# - 通过https的docker中的Asp.Net-Core应用程序

mongodb - 如何使用 docker-compose 存储 MongoDB 数据

docker-registry - 无法注册层 : re-exec error: exit status 1: output: ProcessUtilityVMImage

ssl - Nginx 设置多个域与单个 ssl 证书到相同的上游

php - 将数据添加到 MySQL 并出现 fatal error - Magento

python - 在关系一侧的子集上查询多对多关系

php - 在 Facebook 删除请求 PHP 中使用变量作为帖子 ID

nginx - nginx.conf 的问题

具有相似前缀的 nginx 位置