大家好。刚接触Linux和docker不久,弄了一天也没找到答案,故来博客园请求支援
问题一:docker容器怎么让他只能内网访问
问题描述:
我通过访问jexus。能访问到api,如果我直接输入ip:8802,也能访问到api。就绕过了jexus,那我的jexus还有什么存在的意义呀,我是想在外部只能通过jexus访问到我的api,而不能直接通过ip访问到我的api,所以我想现在api容器禁止被公网访问
问题二:dockerfile中命令
在Linux 我执行命令:sudo /usr/jexus/jws stop a 是成功的,我想这个命令封装到docker镜像中,可死活不成功
FROM mono/jexus //或者用这个
RUN apt-get update &&
apt-get -y install sudo
WORKDIR app
COPY . app
RUN cd app
RUN /usr/jexus/jws stop a
请会的指点下我。谢谢!
docker-compose 配置文件中不对外映射端口就行了,与 Dockerfile 没有关系
api容器不映射端口吗?
version: '3'
services:
db:
image: mysql
container_name: 'mysql'
command: --character-set-server=utf8 --collation-server=utf8_general_ci
restart: always
ports:
- '3306:3306'
environment:
MYSQL_USER: test
MYSQL_PASSWORD: 123456
MYSQL_PASSWORD_HOST: '%'
MYSQL_ROOT_PASSWORD: 123456
MYSQL_ROOT_HOST: '%'
volumes:
- /docker/mysq/my.cnf:/etc/my.cnf
- /docker/mysql/data:/var/lib/mysql
- /docker/mysql/sql:/docker-entrypoint-initdb.d
redis:
image: redis
container_name: 'redis'
command: redis-server /usr/local/etc/redis/redis.conf
restart: always
ports:
- '6379:6379'
environment:
requirepass: 123456 #redis密码
appendonly: 'yes' #redis是否持久化
volumes:
- /docker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
- /docker/redis/data:/data #这里会保存持久化数据
jexus:
image: byniqing/jexus
container_name: 'jexus'
ports:
- '80:8803'#前一个80是暴露外部的,后一个8803是jexus监听的的。也就是配置文件中port=8803,此端口必须要开通
restart: always
volumes:
- /docker/jexus/www:/var/www
- /docker/jexus/siteconf:/usr/jexus/siteconf
- /docker/jexus/log:/usr/jexus/log
#depends_on:
#- web
web:
build: . #会执行当前目录下面的dockerfile文件
container_name: 'api' #容器名称
restart: always # web依赖于db,如果web比db启动快。就连接不上db导致web异常,web容器启动失败,restart可以不断重试,直到连接为止
volumes:
- /docker/myapi/appsettings.json:/app/appsettings.json
ports:
- '8802:80'#8802端口必须开启,如果是阿里云。添加入栈规则,jexus配置。代理到8802即可,浏览器直接访问这个port也能访问
#expose:
#- '8803'
depends_on: #依赖db容器,先启动的容器,但不会等待启动完成
- db
- redis
我的docker-compose ,请问dudu是api节点下吗?
@糯米粥: 去掉下面的配置
ports:
- '8802:80'
@dudu: 这样jexus怎么映射到我的api呀?现在我的jexus是这样配置的
reproxy=/ ip:8802
jexus 通过容器内部网络的 80
端口访问 web
容器
@糯米粥: reproxy=/ web:80
@糯米粥: 你用了 docker-compose ,却走容器外面绕了一圈
@dudu: 嗯。经过你一说,清晰了。容器互连,刚试过成功了,谢谢dudu。第二个问题你能指教下我吗?
@糯米粥: 你想在容器启动时运行 /usr/jexus/jws stop a
?
@dudu: 对呀。我是想把这个命令封装到docker中,不知道我这个想法是不是太奇葩了
@糯米粥: 不奇葩,这是很正常的需求。RUN
是在生成镜像时运行的命令,容器启动时运行的命令要用 ENTRYPOINT
,或者使用 docker compose 中的 command
配置
@dudu: 嗯。好的。我在研究下。谢谢