我想这样做,我可以在下面的代码中运行多个命令:
db:
image: postgres
web:
build: .
command: python manage.py migrate
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
links:
- db
如何执行多个命令?
我想这样做,我可以在下面的代码中运行多个命令:
db:
image: postgres
web:
build: .
command: python manage.py migrate
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
links:
- db
如何执行多个命令?
当前回答
我在尝试将jenkins容器设置为作为jenkins用户构建docker容器时遇到了这个问题。
我需要触摸Dockerfile中的docker.sock文件,因为我稍后将其链接到docker-compose文件中。除非我先接触它,否则它还不存在。这对我有用。
Dockerfile文件:
USER root
RUN apt-get update && \
apt-get -y install apt-transport-https \
ca-certificates \
curl \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release;
echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
$(lsb_release -cs) \
stable" && \
apt-get update && \
apt-get -y install docker-ce
RUN groupmod -g 492 docker && \
usermod -aG docker jenkins && \
touch /var/run/docker.sock && \
chmod 777 /var/run/docker.sock
USER Jenkins
docker-compose.yml文件:
version: '3.3'
services:
jenkins_pipeline:
build: .
ports:
- "8083:8083"
- "50083:50080"
volumes:
- /root/pipeline/jenkins/mount_point_home:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
其他回答
我遇到了同样的问题,我想在端口3000上运行我的react应用程序,在端口6006上运行故事书,两者都在同一个容器中。
我尝试从Dockerfile作为入口点命令启动,并使用docker compose命令选项。
在花了一些时间之后,决定将这些服务分离到单独的容器中,这很有吸引力
基于Alpine的图像实际上似乎没有安装bash,但您可以使用sh或ash链接到/bin/busybox。
docker-compose.yml示例:
version: "3"
services:
api:
restart: unless-stopped
command: ash -c "flask models init && flask run"
你可以在这里使用入口点。docker中的entrypoint在命令之前执行,而命令是容器启动时应该运行的默认命令。所以大多数应用程序通常在入口点文件中携带设置过程,最后允许运行命令。
make shell脚本文件可以是docker-entrypoint.sh(名称无关紧要),其中包含以下内容。
#!/bin/bash
python manage.py migrate
exec "$@"
在docker-compose.yml文件中,将其与entrypoint:/docker-entrypoint.sh一起使用,并将命令注册为命令:python manage.py runserver 0.0.0.0:8000注意:不要忘记将docker-entrypoint.sh与代码一起复制。
基于@Bjorn答案,docker最近引入了特殊的依赖规则,允许您等待“init容器”成功退出
db:
image: postgres
web:
image: app
command: python manage.py runserver 0.0.0.0:8000
depends_on:
db:
migration:
condition: service_completed_successfully
migration:
build: .
image: app
command: python manage.py migrate
depends_on:
- db
我不确定你是否还需要buildkit,但在我这边,它可以与
DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker-compose up
想好了,使用bash-c。
例子:
command: bash -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
多行中的相同示例:
command: >
bash -c "python manage.py migrate
&& python manage.py runserver 0.0.0.0:8000"
Or:
command: bash -c "
python manage.py migrate
&& python manage.py runserver 0.0.0.0:8000
"