首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx没有和我的码头集装箱一起运行

Nginx没有和我的码头集装箱一起运行
EN

Stack Overflow用户
提问于 2015-11-23 20:51:42
回答 2查看 103关注 0票数 1

我正在尝试用Docker构建我的基础设施,我构建了这个脚本,但是Nginx不起作用,我不知道为什么,我做错了什么:

代码语言:javascript
复制
#!/usr/bin/env bash
#Remove current containers
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

#Run Mysql
docker run --name mysql1 -d erkules/galera:basic -p 3306:3306 -p 4567:4567 -p 4444:4444 -p 4568:4568 -v ~/data/mysql:/data --wsrep-cluster-address=gcomm:// --wsrep-node-address=10.10.10.10
docker run --name mysql2 -d erkules/galera:basic -p 3306:3306 -p 4567:4567 -p 4444:4444 -p 4568:4568 -v ~/data/mysql:/data --wsrep-cluster-address=gcomm://10.10.10.10 --wsrep-node-address=10.10.10.11
docker run --name mysql3 -d erkules/galera:basic -p 3306:3306 -p 4567:4567 -p 4444:4444 -p 4568:4568 -v ~/data/mysql:/data --wsrep-cluster-address=gcomm://10.10.10.10 --wsrep-node-address=10.10.10.12

#Run Redis
docker run --name redis1 -d -p 26379 -v ~/data/redis:/data -v ~/conf/sentinel:/src/usr/sentinel.conf -t redis redis-sentinel /src/usr/sentinel.conf
docker run --name redis2 -d -p 26379 -v ~/data/redis:/data -v ~/conf/sentinel:/src/usr/sentinel.conf -t redis redis-sentinel /src/usr/sentinel.conf
docker run --name redis3 -d -p 26379 -v ~/data/redis:/data -v ~/conf/sentinel:/src/usr/sentinel.conf -t redis redis-sentinel /src/usr/sentinel.conf

#Run NodeJS
docker run --name nodejs1   -d -v ~/code:/src/usr/app -w /src/usr/app --link redis1:redis1 --link redis2:redis2 --link redis3:redis3 --link mysql1:mysql1 --link mysql2:mysql2 --link mysql3:mysql3 -t lkzwieder/nodejs:latest nodemon app.js
docker run --name nodejs2 -d -v ~/code:/src/usr/app -w /src/usr/app --link redis1:redis1 --link redis2:redis2 --link redis3:redis3 --link mysql1:mysql1 --link mysql2:mysql2 --link mysql3:mysql3 -t lkzwieder/nodejs:latest nodemon app.js
docker run --name nodejs3 -d -v ~/code:/src/usr/app -w /src/usr/app --link redis1:redis1 --link redis2:redis2 --link redis3:redis3 --link mysql1:mysql1 --link mysql2:mysql2 --link mysql3:mysql3 -t lkzwieder/nodejs:latest nodemon app.js

#Run Nginx
docker run --name balancer -p 80:80 -v ~/conf/nginx:/etc/nginx/conf.d/default.conf --link nodejs1:nodejs1 --link nodejs2:nodejs2 --link nodejs3:nodejs3 -d nginx

但是,当我试图获得工作容器的列表时,sudo docker ps,我得到的是:

代码语言:javascript
复制
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                NAMES
0b25395c3d77        lkzwieder/nodejs:latest   "nodemon app.js"         4 seconds ago       Up 3 seconds        8080/tcp                             nodejs3
34a7cf97b17c        lkzwieder/nodejs:latest   "nodemon app.js"         5 seconds ago       Up 4 seconds        8080/tcp                             nodejs2
8542bc9e5633        lkzwieder/nodejs:latest   "nodemon app.js"         5 seconds ago       Up 4 seconds        8080/tcp                             nodejs1
653cbc561336        redis                     "/entrypoint.sh redis"   5 seconds ago       Up 5 seconds        6379/tcp, 0.0.0.0:32814->26379/tcp   redis3
b14da9dbafcb        redis                     "/entrypoint.sh redis"   6 seconds ago       Up 5 seconds        6379/tcp, 0.0.0.0:32813->26379/tcp   redis2
b0c98f6db945        redis                     "/entrypoint.sh redis"   6 seconds ago       Up 5 seconds        6379/tcp, 0.0.0.0:32812->26379/tcp   redis1
e2cc1441520d        erkules/galera:basic      "mysqld -p 3306:3306 "   7 seconds ago       Up 6 seconds                                             mysql3
a053c9282be2        erkules/galera:basic      "mysqld -p 3306:3306 "   7 seconds ago       Up 6 seconds                                             mysql2
d9083d3f7daf        erkules/galera:basic      "mysqld -p 3306:3306 "   8 seconds ago       Up 7 seconds                                             mysql1

所以,我没有我的nginx平衡器。

我的nginx配置是:

代码语言:javascript
复制
worker_processes 4;
events {
    worker_connections 1024;
}

http {
    sendfile on;

    gzip              on;
    gzip_http_version 1.0;
    gzip_proxied      any;
    gzip_min_length   500;
    gzip_disable      "MSIE [1-6]\.";
    gzip_types        text/plain text/xml text/css
                      text/comma-separated-values
                      text/javascript
                      application/x-javascript
                      application/atom+xml;

    upstream node-app {
        least_conn;
        server nodejs1:8080 weight=10 max_fails=3 fail_timeout=30s;
        server nodejs2:8080 weight=10 max_fails=3 fail_timeout=30s;
        server nodejs3:8080 weight=10 max_fails=3 fail_timeout=30s;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://node-app;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-15 21:11:06

嗯,我忘了这个问题,但这是结果。我改进了脚本,以启动所有环境,将主机自动添加到/etc/ host。

我的问题是在nginx配置和端口。

代码语言:javascript
复制
#!/usr/bin/env bash
read -p "Which is the host for nginx?: (dev.domain.com) " userHost
userHost=${userHost:-dev.domain.com}

#Remove current containers
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

# MySQL
docker run -v ~/mypath/to/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=admin -e MYSQL_PASSWORD=password -e MYSQL_DATABASE=databasename --name mysql0 -p 3306:3306 -d mysql/mysql-server

# NodeJS
docker run --name nodejs0 -v ~/mypath/to/code:/src/usr/app --link mysql0:mysql0 -w /src/usr/app -d lkzwieder/nodejs:nodemon
docker run --name nodejs1 -v ~/mypath/to/code:/src/usr/app --link mysql0:mysql0 -w /src/usr/app -d lkzwieder/nodejs:nodemon
docker run --name nodejs2 -v ~/mypath/to/code:/src/usr/app --link mysql0:mysql0 -w /src/usr/app -d lkzwieder/nodejs:nodemon

# Nginx
docker run --name balancer -v ~/mypath/to/conf/nginx:/etc/nginx/conf.d/server.conf -p 80:80 --link nodejs0:nodejs0 --link nodejs1:nodejs1 --link nodejs2:nodejs2 -d lkzwieder/nginx sh -c "service nginx start"

# Nginx ip into /etc/hosts
etchosts=`cat /etc/hosts | grep -v ${userHost}`
hostIp=`docker inspect balancer | grep "\"IPAddress\"" | cut -d ":" -f2 | cut -d "\"" -f2 | head -1`
echo -e "$etchosts" "\n${hostIp} ${userHost}" > /etc/hosts
票数 2
EN

Stack Overflow用户

发布于 2015-11-24 08:02:52

您可以运行docker ps -a | grep balancer来知道您的平衡器是否有一个停止的容器!看看您的脚本,很可能您的平衡器遇到了一个nginx启动错误,因此会突然停止。

如果您看到您的平衡器有一个停止的容器,首先使用docker rm balancer删除它,然后使用

docker run --name balancer -p 80:80 -v ~/conf/nginx:/etc/nginx/conf.d/default.conf --link nodejs1:nodejs1 --link nodejs2:nodejs2 --link nodejs3:nodejs3 -it nginx

现在,您将能够看到容器的输出,并能够理解实际问题所在!如果您可以在这里发布您收到的输出(这是@tsturzl在他的评论中所要求的),那么有人可以帮助您。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33880456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档