gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:39:34 24 4
gpt4 key购买 nike

我正在尝试学习如何将 docker compose 与一个简单的 nginx 容器设置一起使用,该容器将请求重新路由到一个 ghost 容器。我使用的是标准的 ghost 镜像,但有一个自定义的 nginx 镜像(继承自标准镜像)。

当我使用“docker-compose up”运行组合时,它会立即以“docker_nginx_1 exited with code 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]

最佳答案

Dockerfile 中的 CMD 应该启动一个需要在前台运行的进程。命令 service nginx start 以守护模式运行进程,因此您的容器干净地退出,因为 service 命令退出。

使用下面的CMD ["nginx", "-g", "daemon off;"]启动nginx(取自official image),应该可以正常工作了。

关于nginx - 当 docker-compose 的一部分时,自定义 nginx 容器立即退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33724125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com