我想在CentOS 7容器上启动httpd服务.但是systemctl命令在容器中不起作用.在CentOS 6中,我可以通过简单地使用/etc/init.d/apachectl -d
命令启动httpd .但是在CentOS 7中我找不到任何apachectl文件/*/systemd/
.
那么如何在CentOS 7容器中启动httpd服务呢?
我使用下面的Dockerfile创建了docker镜像.
FROM ubuntu
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
net-tools \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
netcat \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
EXPOSE 1234
ENTRYPOINT bin/bash
CMD ["nc", "-l", "1234"]
Run Code Online (Sandbox Code Playgroud)
我从aboce docker文件创建了图像,并通过运行以下命令使用图像运行docker容器.
docker run -d -i -p 1234:1234 --name daemon nc-ubuntu nc -l 1234
Run Code Online (Sandbox Code Playgroud)
在另一个终端中,我运行以下命令.
telnet localhost 1234
Run Code Online (Sandbox Code Playgroud)
我得到了以下输出.
$ telnet localhost 1234
Trying ::1...
Connected to localhost.
Escape …
Run Code Online (Sandbox Code Playgroud) 所以我有一个 docker 文件可以做到这一点:
ENV ENV ${ENV}
ENV SERVICE_NAME ${SERVICE_NAME}
USER app
ENV HOME=/home/app
COPY target /home/app/target
COPY entrypoint.sh /home/app
WORKDIR /home/app
ENTRYPOINT /usr/bin/chamber exec ${ENV}_${SERVICE_NAME} -r 1 -- ./entrypoint.sh
CMD java -jar -Dspring.profiles.active=docker target/my.jar
Run Code Online (Sandbox Code Playgroud)
因此 ENTRYPOINT 运行并从 AWS Parameter Store 中提取一些秘密,并将它们作为环境变量填充到 entrypoint.sh shell 中。然后 entrypoint.sh 对它们执行一些操作,创建一些文件等,并在其最后一行执行“exec $@”。
然后我期待 CMD 运行,但它只能看到运行“ExecStop=/usr/bin/docker stop app”的 systemd 服务文件。
systemd 服务文件执行此操作以启动容器:
ExecStart=/usr/bin/docker run --name app --memory-reservation=128m --memory=512m -e ENV=dev -e SERVICE_NAME=app 1234567890.dkr.ecr.eu-west-2.amazonaws.com/app:latest
Run Code Online (Sandbox Code Playgroud)
CMD怎么了?
我有一个大型 java 应用程序,在不同的类中有 5 个主要方法。我想将此应用程序作为 Docker 容器运行。从DockerHub OpenJDK Image,我启动了我的 Dockerfile,如下所示
FROM openjdk:latest
COPY . /usr/src/APP
WORKDIR /usr/src/APP`
Run Code Online (Sandbox Code Playgroud)
我想添加行来运行主要方法。没有 Docker,我使用以下几行运行应用程序
echo 'Starting App'
nohup $JAVA_HOME/bin/java .:./App.jar path.to.main.class1 >>
/path/to/nohup/nohup.out 2>&1 &
nohup $JAVA_HOME/bin/java .:./App.jar path.to.main.class2 >>
/path/to/nohup/nohup.out 2>&1 &
nohup $JAVA_HOME/bin/java .:./App.jar path.to.main.class3 >>
/path/to/nohup/nohup.out 2>&1 &
nohup $JAVA_HOME/bin/java .:./App.jar path.to.main.class4 >>
/path/to/nohup/nohup.out 2>&1 &
nohup $JAVA_HOME/bin/java .:./App.jar path.to.main.class5 >>
/path/to/nohup/nohup.out 2>&1 &
echo 'App Started Successfully'`
Run Code Online (Sandbox Code Playgroud)
是否可以在一个 docker 容器中运行上述场景?如果可以的话,一个 Dockerfile 中只能有一条指令,ENTRYPOINT
怎么办?CMD
docker 文档说你可以构建这个最小的镜像:
FROM scratch
ADD hello /
CMD ["/hello"]
Run Code Online (Sandbox Code Playgroud)
据推测,其工作方式是该CMD
步骤使用默认 shell(即,bin/sh
根据/sf/answers/1509549331/)来运行hello
可执行文件。
但如果 SCRATCH 真的完全是空的,那么它从哪里来呢bin/sh
?为什么我的图像包含外壳?
无法在 dockerfile 中的 docker for windows 上执行 CMD 命令。
我想使用 CMD 运行几个命令,但是,甚至无法运行单个命令。
我已经尝试了以下方法,但没有任何效果......
1.
CMD "sqlcmd -S database -i C:\db\db_scripts\upgradescript.sql -U sa -P mypassword"
Run Code Online (Sandbox Code Playgroud)
2.
RUN ["powershell", "-NoProfile", "-Command", "c:\db\db_scripts\script.ps1"]
Run Code Online (Sandbox Code Playgroud)
3.
CMD ["cmd", "sqlcmd", "-S", "database", "-i", "C:\db\db_scripts\upgradescript.sql", "-U", "sa", "-P", "mypassword"]
Run Code Online (Sandbox Code Playgroud)
4.
ARG arg1=database
ARG arg2=C:\db\db_scripts\upgradescript.sql
ARG arg3=sa
ARG arg4=mypassword!
RUN ["cmd", "-NoProfile", "-Command", "sqlcmd -S $env:arg1 -i $env:arg2 -U $env:arg3 -P $env:arg4"]
Run Code Online (Sandbox Code Playgroud)
5.
RUN powershell.exe c:\db\db_scripts\script.ps1
Run Code Online (Sandbox Code Playgroud)
6.
ENTRYPOINT ["powershell", "-NoProfile", "-Command", "sqlcmd"]
CMD ["-S database -i C:\db\db_scripts\upgradescript.sql -U …
Run Code Online (Sandbox Code Playgroud) containers docker dockerfile docker-container docker-for-windows
我有一个使用 docker 和 laravel 运行的应用程序,但有一些指令显然已执行但无法运行。
这些说明是php artisan clear:cache
和php artisan optimize
。有时我需要进入容器并运行这些指令,以便在浏览器中反映我的更改。除了 kubernetes 由于未反映的更改而检测到的故障
FROM php:7.2.0-fpm as php
RUN apt-get update && apt-get install -y openssl openssh-client \
rsync sshpass zip unzip git vim libmcrypt-dev mysql-client \
libssh2-1-dev libmagickwand-dev \n
gnupg2 --no-install-recommends zlib1g-dev sass \
&& pecl install mcrypt-1.0.1 \
&& docker-php-ext-enable mcrypt \
&& pecl install imagick \
&& docker-php-ext-enable imagick \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install gd \
&& docker-php-ext-install zip \
&& pecl install …
Run Code Online (Sandbox Code Playgroud) 我是 Docker 的新手,我试图弄清楚是否可以使用不同的参数多次运行应用程序。
我使用 .Net 开发了我的应用程序,到目前为止我已经使用 Ubuntu 服务执行了所有实例,例如:
[Unit]
Description=swp %I
[Service]
Environment=ENV=PRODUCTION
Type=simple
User=foo
ExecStart=/usr/bin/dotnet /opt/swp/app.dll %i
WorkingDirectory=/opt/app
Restart=always
RestartSec=5
Run Code Online (Sandbox Code Playgroud)
%I
我在启动服务时传递的参数在哪里,例如:
sudo systemctl start app@argument1.service
sudo systemctl start app@argument2.service
sudo systemctl start app@argument3.service
Run Code Online (Sandbox Code Playgroud)
因此,根据提供的参数,我有三个以不同逻辑运行的应用程序实例。
如何使用 Docker 复制相同的内容?
我是docker的新手,对dockfile有一个简单的问题.我们可以在dock文件中编写入口点和CMD.似乎在创建容器期间执行入口点.并且在启动容器期间执行CMD.这是真的?
docker ×9
dockerfile ×5
apache ×1
centos7 ×1
containers ×1
java ×1
laravel ×1
laravel-5.7 ×1
shell ×1