我正在尝试用Docker构建我的基础设施,我构建了这个脚本,但是Nginx不起作用,我不知道为什么,我做错了什么:
#!/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,我得到的是:
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配置是:
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;
}
}
}发布于 2015-12-15 21:11:06
嗯,我忘了这个问题,但这是结果。我改进了脚本,以启动所有环境,将主机自动添加到/etc/ host。
我的问题是在nginx配置和端口。
#!/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发布于 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在他的评论中所要求的),那么有人可以帮助您。
https://stackoverflow.com/questions/33880456
复制相似问题