当docker-compose的一部分时,自定义nginx容器立即退出

我正在尝试学习如何将docker

compose与nginx容器的简单设置结合使用,该设置将请求重新路由到ghost容器。我正在使用标准的鬼影图像,但是有一个自定义的nginx图像(继承自标准图像)。

当我使用“ docker-compose up”运行合成文件时,它会立即退出,而“

docker_nginx_1以代码0退出”。但是,当我手动构建并运行它时,它运行良好,并且可以将浏览器导航到该容器并查看默认的nginx页面。我对撰写文件的误解是什么导致其行为与自定义构建有所不同?我该如何更改才能使其继续运行?

免责声明:我同时也在学习nginx,因此一次学习两件事可能会给我带来不必要的问题。

编辑:原始文件要复杂一些,但我已将问题简化为:如果我对自定义映像使用build命令,该自定义映像除了从默认的nginx映像继承外什么也不做,因此会立即退出。如果我使用默认的nginx图像,它将起作用。这些是现在相关的文件:

撰写文件:

ghost:

expose:

- "2368"

image: ghost

nginx:

# image: nginx << If I use this instead of my custom build, it doesn't exit

build: ./nginx

ports:

- "80:80"

- "443:443"

links:

- ghost

nginx / Dockerfile:

FROM nginx

原始文件(具有与上述相同的撰写文件):

nginx / Dockerfile:

FROM nginx

RUN rm /etc/nginx/nginx.conf

COPY conf/nginx.conf /etc/nginx/nginx.conf

COPY conf/sites-available/ghost /etc/nginx/sites-available/ghost

RUN mkdir /etc/nginx/sites-enabled

RUN ln -s /etc/nginx/sites-available/ghost /etc/nginx/sites-enabled/ghost

EXPOSE 80 443

# Is this even the right command I have no idea

CMD service nginx start

nginx / conf / nginx.conf:

daemon off;

user nginx;

# Let nginx figure out the processes I guess

worker_processes auto;

error_log /var/log/nginx/error.log warn;

pid /var/run/nginx.pid;

events {

worker_connections 1024;

}

http {

include /etc/nginx/mime.types;

default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;

#tcp_nopush on;

keepalive_timeout 65;

#gzip on;

include /etc/nginx/conf.d/*.conf;

}

nginx / conf / sites-available / ghost

server {

listen 80;

server_name 127.0.0.1;

access_log /var/log/nginx/localhost.log;

location / {

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header HOST $http_host;

proxy_set_header X-NginX-Proxy true;

proxy_pass http://0.0.0.0:2368;

proxy_redirect off;

}

}

运行撰写:

plays-MacBook-Pro:docker play$ docker-compose up

Creating docker_ghost_1...

Creating docker_nginx_1...

Attaching to docker_ghost_1, docker_nginx_1

docker_nginx_1 exited with code 0

Gracefully stopping... (press Ctrl+C again to force)

Stopping docker_ghost_1... done

手动运行:

plays-MacBook-Pro:nginx play$ docker build --no-cache -t nginx_custom .

Sending build context to Docker daemon 8.704 kB

Step 0 : FROM nginx

---> 914c82c5a678

Step 1 : RUN rm /etc/nginx/nginx.conf

---> Running in 4ce9de96bb36

---> 98f97a9da4fc

Removing intermediate container 4ce9de96bb36

Step 2 : ADD conf/nginx.conf /etc/nginx/nginx.conf

---> dd3e089208a9

Removing intermediate container 36b9a47e0806

Step 3 : ADD conf/sites-available/ghost /etc/nginx/sites-available/ghost

---> 55fae53e5810

Removing intermediate container a82741d24af4

Step 4 : RUN mkdir /etc/nginx/sites-enabled

---> Running in 7659ead01b7b

---> 406be1c42394

Removing intermediate container 7659ead01b7b

Step 5 : RUN ln -s /etc/nginx/sites-available/ghost /etc/nginx/sites-enabled/ghost

---> Running in e9658a08affa

---> 021a84216e8a

Removing intermediate container e9658a08affa

Step 6 : EXPOSE 80 443

---> Running in 230e4523794c

---> 23d85e1a04cb

Removing intermediate container 230e4523794c

Step 7 : CMD service nginx start

---> Running in 209e129cae21

---> d7004d6fa223

Removing intermediate container 209e129cae21

Successfully built d7004d6fa223

plays-MacBook-Pro:nginx play$ docker run -t nginx_custom

[It sits here on an empty line, running in the background]

回答:

刚遇到同样的问题,最初的 解决方法 是更改中的服务名称docker-compose.yml

这行得通,但 行得通,是因为Docker-compose缓存了构建并将其与服务名称绑定。每个docker-compose

up后的第一个只使用它之前建造的,所以所做的任何更改的Dockerfile,或者的那部分docker-compose.yml基本上忽略。

当您(和我)更改服务名称时,由于该服务名称之前没有被标记过,因此它触发了新的构建。

的 的解决方案是做一个:搬运工-

撰写生成重建图像(后面跟一个docker-

compose up)。他们的文档并没有真正强调这个问题。

以上是 当docker-compose的一部分时,自定义nginx容器立即退出 的全部内容, 来源链接: utcz.com/qa/405772.html

回到顶部