Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nginx没有';Don’别和我的码头工人一起跑_Nginx_Docker - Fatal编程技术网

Nginx没有';Don’别和我的码头工人一起跑

Nginx没有';Don’别和我的码头工人一起跑,nginx,docker,Nginx,Docker,我试图用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 -

我试图用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
但是当我试图获取工作容器列表时,我得到的是:

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;
        }
    }
}

您可以运行
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在评论中提出的问题),那么有人可以帮助你

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

我的问题是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

在不进行后台监控的情况下运行nginx docker并提供输出。它可能是您的nginx配置,也可能是任何数量的错误,最简单的方法是从容器的stdout中找到它。